From: jenkins-bot Date: Mon, 11 Apr 2016 17:45:49 +0000 (+0000) Subject: Merge "Normalize `input[type="search"]`" X-Git-Tag: 1.31.0-rc.0~7328 X-Git-Url: http://git.cyclocoop.org/%27%20.%20%24prefix%20.%20Wiki::transformTitleToURI%28%24matches%5B1%5D%29%20.%20%27?a=commitdiff_plain;h=faf9337f27516c18ca3e406401d68b361c890622;hp=436cdf92c725361c4930a9e148ea37c2da61d2d6;p=lhc%2Fweb%2Fwiklou.git Merge "Normalize `input[type="search"]`" --- diff --git a/autoload.php b/autoload.php index c3e988c12a..847e291487 100644 --- a/autoload.php +++ b/autoload.php @@ -794,7 +794,13 @@ $wgAutoloadLocalClasses = [ 'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php', 'MediaWiki\\Logger\\Spi' => __DIR__ . '/includes/debug/logger/Spi.php', 'MediaWiki\\MediaWikiServices' => __DIR__ . '/includes/MediaWikiServices.php', + 'MediaWiki\\Services\\CannotReplaceActiveServiceException' => __DIR__ . '/includes/Services/CannotReplaceActiveServiceException.php', + 'MediaWiki\\Services\\ContainerDisabledException' => __DIR__ . '/includes/Services/ContainerDisabledException.php', + 'MediaWiki\\Services\\DestructibleService' => __DIR__ . '/includes/Services/DestructibleService.php', + 'MediaWiki\\Services\\NoSuchServiceException' => __DIR__ . '/includes/Services/NoSuchServiceException.php', + 'MediaWiki\\Services\\ServiceAlreadyDefinedException' => __DIR__ . '/includes/Services/ServiceAlreadyDefinedException.php', 'MediaWiki\\Services\\ServiceContainer' => __DIR__ . '/includes/Services/ServiceContainer.php', + 'MediaWiki\\Services\\ServiceDisabledException' => __DIR__ . '/includes/Services/ServiceDisabledException.php', 'MediaWiki\\Session\\BotPasswordSessionProvider' => __DIR__ . '/includes/session/BotPasswordSessionProvider.php', 'MediaWiki\\Session\\CookieSessionProvider' => __DIR__ . '/includes/session/CookieSessionProvider.php', 'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' => __DIR__ . '/includes/session/ImmutableSessionProviderWithCookie.php', diff --git a/docs/hooks.txt b/docs/hooks.txt index 31e9d92a46..9c14607d1e 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -1997,9 +1997,18 @@ $user: $wgUser $request: $wgRequest $mediaWiki: The $mediawiki object -'MediaWikiServices': Override services in the default MediaWikiServices instance. -Extensions may use this to define, replace, or wrap existing services. -However, the preferred way to define a new service is the $wgServiceWiringFiles array. +'MediaWikiServices': Called when a global MediaWikiServices instance is +initialized. Extensions may use this to define, replace, or wrap services. +However, the preferred way to define a new service is +the $wgServiceWiringFiles array. +$services: MediaWikiServices + +'MediaWikiServices::resetLegacyServices': Called when MediaWikiServices resets +global instances of all well known services that are not yet managed by +MediaWikiServices directly. Extension may use this hook to reset their own +global service instances. However, it is preferred for extensions to have their +services managed by MediaWikiServices directly, by registering them +via $wgServiceWiringFiles or the 'MediaWikiServices' hook. $services: MediaWikiServices 'MessageCache::get': When fetching a message. Can be used to override the key diff --git a/docs/injection.txt b/docs/injection.txt index e0466c44a5..219e49d70e 100644 --- a/docs/injection.txt +++ b/docs/injection.txt @@ -37,6 +37,15 @@ DI framework. Per default, $wgServiceWiringFiles lists includes/ServiceWiring.php, which defines all default service implementations, and specifies how they depend on each other ("wiring"). +Note that services get their configuration injected, and changes to global +configuration variables will not have any effect on services that were already +instantiated. This would typically be the case for low level services like +the ConfigFactory or the ObjectCacheManager, which are used during extension +registration. To address this issue, Setup.php resets the global service +locator instance by calling MediaWikiServices::resetGlobalInstance() once +configuration and extension registration is complete. + + When a new service is added to MediaWiki core, an instantiator function that will create the appropriate default instance for that service must be added to ServiceWiring.php. This makes the service available through diff --git a/includes/ForkController.php b/includes/ForkController.php index 2725753498..655d7564a7 100644 --- a/includes/ForkController.php +++ b/includes/ForkController.php @@ -133,7 +133,8 @@ class ForkController { $this->termReceived = false; } } while ( count( $this->children ) ); - pcntl_signal( SIGTERM, SIG_DFL ); + + $this->initProcess(); return 'done'; } @@ -149,14 +150,12 @@ class ForkController { protected function prepareEnvironment() { global $wgMemc; - // Don't share DB, storage, or memcached connections - wfGetLBFactory()->destroyInstance(); - FileBackendGroup::destroySingleton(); - LockManagerGroup::destroySingletons(); - JobQueueGroup::destroySingletons(); - ObjectCache::clear(); - RedisConnectionPool::destroySingletons(); - $wgMemc = null; + $wgMemc = null; // TODO: change all code that accesses this directly! + + // NOTE: we want to destroy global service instances before forking, + // so no external resources such as database connections get copied + // to the child processes. + \MediaWiki\MediaWikiServices::disableStorageBackend(); } /** @@ -178,7 +177,7 @@ class ForkController { } if ( !$pid ) { - $this->initChild(); + $this->initProcess(); $this->childNumber = $i; return 'child'; } else { @@ -190,9 +189,10 @@ class ForkController { return 'parent'; } - protected function initChild() { - global $wgMemc, $wgMainCacheType; - $wgMemc = wfGetCache( $wgMainCacheType ); + protected function initProcess() { + // Reset services, so we don't re-use connections. + \MediaWiki\MediaWikiServices::resetChildProcessServices(); + $this->children = null; pcntl_signal( SIGTERM, SIG_DFL ); } diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index 5c42bc26cf..8c55d9a929 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -3109,6 +3109,9 @@ function wfSplitWikiID( $wiki ) { * Note 2: use $this->getDB() in maintenance scripts that may be invoked by * updater to ensure that a proper database is being updated. * + * @todo Replace calls to wfGetDB with calls to LoadBalancer::getConnection() + * on an injected instance of LoadBalancer. + * * @return DatabaseBase */ function wfGetDB( $db, $groups = [], $wiki = false ) { @@ -3118,20 +3121,30 @@ function wfGetDB( $db, $groups = [], $wiki = false ) { /** * Get a load balancer object. * + * @deprecated since 1.27, use MediaWikiServices::getDBLoadBalancer() + * or MediaWikiServices::getDBLoadBalancerFactory() instead. + * * @param string|bool $wiki Wiki ID, or false for the current wiki * @return LoadBalancer */ function wfGetLB( $wiki = false ) { - return wfGetLBFactory()->getMainLB( $wiki ); + if ( $wiki === false ) { + return \MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancer(); + } else { + $factory = \MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); + return $factory->getMainLB( $wiki ); + } } /** * Get the load balancer factory object * + * @deprecated since 1.27, use MediaWikiServices::getDBLoadBalancerFactory() instead. + * * @return LBFactory */ function wfGetLBFactory() { - return LBFactory::singleton(); + return \MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); } /** diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php index 7b1def9eae..dd66967d92 100644 --- a/includes/MediaWikiServices.php +++ b/includes/MediaWikiServices.php @@ -1,15 +1,41 @@ get( 'ServiceWiringFiles' ); - $instance->loadWiringFiles( $wiringFiles ); + self::resetLegacyServices(); - // Provide a traditional hook point to allow extensions to configure services. - Hooks::run( 'MediaWikiServices', [ $instance ] ); + return $old; + } + + /** + * Creates a new instance of MediaWikiServices and sets it as the global default + * instance. getInstance() will return a different MediaWikiServices object + * after every call to resetGlobalServiceLocator(). + * + * @warning This should not be used during normal operation. It is intended for use + * when the configuration has changed significantly since bootstrap time, e.g. + * during the installation process or during testing. + * + * @warning Calling resetGlobalServiceLocator() may leave the application in an inconsistent + * state. Calling this is only safe under the ASSUMPTION that NO REFERENCE to + * any of the services managed by MediaWikiServices exist. If any service objects + * managed by the old MediaWikiServices instance remain in use, they may INTERFERE + * with the operation of the services managed by the new MediaWikiServices. + * Operating with a mix of services created by the old and the new + * MediaWikiServices instance may lead to INCONSISTENCIES and even DATA LOSS! + * Any class implementing LAZY LOADING is especially prone to this problem, + * since instances would typically retain a reference to a storage layer service. + * + * @see forceGlobalInstance() + * @see resetGlobalInstance() + * @see resetBetweenTest() + * + * @param Config|null $bootstrapConfig The Config object to be registered as the + * 'BootstrapConfig' service. This has to contain at least the information + * needed to set up the 'ConfigFactory' service. If not given, the bootstrap + * config of the old instance of MediaWikiServices will be re-used. If there + * was no previous instance, a new GlobalVarConfig object will be used to + * bootstrap the services. + * + * @throws MWException + */ + public static function resetGlobalInstance( Config $bootstrapConfig = null ) { + if ( self::$instance === null ) { + // no global instance yet, nothing to reset + return; } + if ( $bootstrapConfig === null ) { + $bootstrapConfig = self::$instance->getBootstrapConfig(); + } + + self::$instance->destroy(); + + self::$instance = self::newInstance( $bootstrapConfig ); + + self::resetLegacyServices(); + } + + /** + * Creates a new MediaWikiServices instance and initializes it according to the + * given $bootstrapConfig. In particular, all wiring files defined in the + * ServiceWiringFiles setting are loaded, and the MediaWikiServices hook is called. + * + * @param Config|null $bootstrapConfig The Config object to be registered as the + * 'BootstrapConfig' service. This has to contain at least the information + * needed to set up the 'ConfigFactory' service. If not provided, any call + * to getBootstrapConfig(), getConfigFactory, or getMainConfig will fail. + * A MediaWikiServices instance without access to configuration is called + * "primordial". + * + * @return MediaWikiServices + * @throws MWException + */ + private static function newInstance( Config $bootstrapConfig ) { + $instance = new self( $bootstrapConfig ); + + // Load the default wiring from the specified files. + $wiringFiles = $bootstrapConfig->get( 'ServiceWiringFiles' ); + $instance->loadWiringFiles( $wiringFiles ); + + // Provide a traditional hook point to allow extensions to configure services. + Hooks::run( 'MediaWikiServices', [ $instance ] ); + return $instance; } + /** + * Resets global instances of services that have not yet been ported to using + * MediaWikiServices to manage their default instance. + * + * @note eventually, all global service instances are to be managed by MediaWikiServices. + * To emulate the effect of resetting the global service locator, we reset the individual + * static singletons for now. + * + * @note As long as we don't know the interdependencies between the services, the only way + * to reset services consistently is to reset all services at once. This should be ok since + * there should rarely be a need to reset all processes. + */ + private static function resetLegacyServices() { + global $wgContLang, $wgUser, $wgMemc, $wgRequest; + + $services = self::getInstance(); + $config = $services->getMainConfig(); + + // NOTE: all the services instance that get reset below should be migrated + // to be managed by MediaWikiServices. Eventually, this method can then be + // removed. + + User::resetIdByNameCache(); + LinkCache::singleton()->clear(); + Title::clearCaches(); + + MWTidy::destroySingleton(); + MagicWord::clearCache(); + SpecialPageFactory::resetList(); + JobQueueAggregator::destroySingleton(); + DeferredUpdates::clearPendingUpdates(); + CentralIdLookup::resetCache(); + MediaHandler::resetCache(); + IP::clearCaches(); + ResourceLoader::clearCache(); + + ApiQueryInfo::resetTokenCache(); + + RepoGroup::destroySingleton(); + + MessageCache::destroyInstance(); + + MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache + Language::$mLangObjCache = []; + Language::getLocalisationCache()->unloadAll(); + + ObjectCache::clear(); + RedisConnectionPool::destroySingletons(); + FileBackendGroup::destroySingleton(); + LockManagerGroup::destroySingletons(); + + RequestContext::resetMain(); + $wgRequest = RequestContext::getMain()->getRequest(); // BackCompat + + $wgContLang = Language::factory( $config->get( 'LanguageCode' ) ); + $wgContLang->resetNamespaces(); # reset namespace cache + + $wgMemc = ObjectCache::getLocalClusterInstance(); + $wgUser = RequestContext::getMain()->getUser(); + + SessionManager::resetCache(); + + // Provide a hook point for extensions that need to reset global service instances. + Hooks::run( 'MediaWikiServices::resetLegacyServices', [ $services ] ); + } + + /** + * Disables all storage layer services. After calling this, any attempt to access the + * storage layer will result in an error. Use resetGlobalInstance() to restore normal + * operation. + * + * @warning This is intended for extreme situations only and should never be used + * while serving normal web requests. Legitimate use cases for this method include + * the installation process. Test fixtures may also use this, if the fixture relies + * on globalState. + * + * @see resetGlobalInstance() + * @see resetChildProcessServices() + */ + public static function disableStorageBackend() { + // TODO: also disable some Caches, JobQueues, etc + $destroy = [ 'DBLoadBalancer', 'DBLoadBalancerFactory' ]; + $services = self::getInstance(); + + foreach ( $destroy as $name ) { + $services->disableService( $name ); + } + } + + /** + * Resets any services that may have become stale after a child process + * returns from after pcntl_fork(). It's also safe, but generally unnecessary, + * to call this method from the parent process. + * + * @note This is intended for use in the context of process forking only! + * + * @see resetGlobalInstance() + * @see disableStorageBackend() + */ + public static function resetChildProcessServices() { + // NOTE: for now, just reset everything. Since we don't know the interdependencies + // between services, we can't do this more selectively at this time. + self::resetGlobalInstance(); + + // Child, reseed because there is no bug in PHP: + // http://bugs.php.net/bug.php?id=42465 + mt_srand( getmypid() ); + } + + /** + * Resets the given service for testing purposes. + * + * @warning This is generally unsafe! Other services may still retain references + * to the stale service instance, leading to failures and inconsistencies. Subclasses + * may use this method to reset specific services under specific instances, but + * it should not be exposed to application logic. + * + * @note With proper dependency injection used throughout the codebase, this method + * should not be needed. It is provided to allow tests that pollute global service + * instances to clean up. + * + * @param string $name + * @param string $destroy Whether the service instance should be destroyed if it exists. + * When set to false, any existing service instance will effectively be detached + * from the container. + * + * @throws MWException if called outside of PHPUnit tests. + */ + public function resetServiceForTesting( $name, $destroy = true ) { + if ( !defined( 'MW_PHPUNIT_TEST' ) ) { + throw new MWException( 'resetServiceForTesting() must not be used outside unit tests.' ); + } + + $this->resetService( $name, $destroy ); + } + + /** + * Convenience method that throws an exception if called outside the service bootstrapping + * phase as indicated by the MW_SERVICE_BOOTSTRAP_COMPLETE constant - that is, after + * Setup.php has called resetGlobalInstance(). Additionally, no exception is thrown if + * this method is called during unit testing (as indicated by MW_PHPUNIT_TEST) or + * during installation (as indicated by MEDIAWIKI_INSTALL). + * + * This method is intended to be used to safeguard against accidentally resetting + * global service instances that are not yet managed by MediaWikiServices. It is + * defined here in the MediaWikiServices services class to keep the knowledge about + * how the bootstrapping phase is managed central. + * + * @param string $method the name of the caller method, as given by __METHOD__. + * + * @throws MWException if called outside bootstrap mode. + * + * @see resetGlobalInstance() + * @see forceGlobalInstance() + * @see disableStorageBackend() + */ + public static function failUnlessBootstrapping( $method ) { + if ( !defined( 'MW_PHPUNIT_TEST' ) + && !defined( 'MEDIAWIKI_INSTALL' ) + && defined( 'MW_SERVICE_BOOTSTRAP_COMPLETE' ) + ) { + throw new MWException( $method . ' may only be called during bootstrapping unit tests!' ); + } + + ObjectCache::clear(); + } + /** * @param Config $config The Config object to be registered as the 'BootstrapConfig' service. * This has to contain at least the information needed to set up the 'ConfigFactory' @@ -91,12 +381,14 @@ class MediaWikiServices extends ServiceContainer { public function __construct( Config $config ) { parent::__construct(); - // register the given Config object as the bootstrap config service. + // Register the given Config object as the bootstrap config service. $this->defineService( 'BootstrapConfig', function() use ( $config ) { return $config; } ); } + // CONVENIENCE GETTERS //////////////////////////////////////////////////// + /** * Returns the Config object containing the bootstrap configuration. * Bootstrap configuration would typically include database credentials @@ -144,6 +436,27 @@ class MediaWikiServices extends ServiceContainer { return $this->getService( 'SiteStore' ); } + /** + * @return LBFactory + */ + public function getDBLoadBalancerFactory() { + return $this->getService( 'DBLoadBalancerFactory' ); + } + + /** + * @return LoadBalancer The main DB load balancer for the local wiki. + */ + public function getDBLoadBalancer() { + return $this->getService( 'DBLoadBalancer' ); + } + + /** + * @return WatchedItemStore + */ + public function getWatchedItemStore() { + return $this->getService( 'WatchedItemStore' ); + } + /////////////////////////////////////////////////////////////////////////// // NOTE: When adding a service getter here, don't forget to add a test // case for it in MediaWikiServicesTest::provideGetters() and in diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index d8709b95f0..dc2c66b6b8 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -40,9 +40,29 @@ use MediaWiki\MediaWikiServices; return [ + 'DBLoadBalancerFactory' => function( MediaWikiServices $services ) { + // NOTE: Defining the LBFactory class via LBFactoryConf is supported for + // backwards compatibility. The preferred way would be to register a + // callback for DBLoadBalancerFactory that constructs the desired LBFactory + // directly. + $config = $services->getMainConfig()->get( 'LBFactoryConf' ); + + $class = LBFactory::getLBFactoryClass( $config ); + if ( !isset( $config['readOnlyReason'] ) ) { + // TODO: replace the global wfConfiguredReadOnlyReason() with a service. + $config['readOnlyReason'] = wfConfiguredReadOnlyReason(); + } + + return new $class( $config ); + }, + + 'DBLoadBalancer' => function( MediaWikiServices $services ) { + // just return the default LB from the DBLoadBalancerFactory service + return $services->getDBLoadBalancerFactory()->getMainLB(); + }, + 'SiteStore' => function( MediaWikiServices $services ) { - $loadBalancer = wfGetLB(); // TODO: use LB from MediaWikiServices - $rawSiteStore = new DBSiteStore( $loadBalancer ); + $rawSiteStore = new DBSiteStore( $services->getDBLoadBalancer() ); // TODO: replace wfGetCache with a CacheFactory service. // TODO: replace wfIsHHVM with a capabilities service. @@ -72,6 +92,15 @@ return [ return $services->getConfigFactory()->makeConfig( 'main' ); }, + 'WatchedItemStore' => function( MediaWikiServices $services ) { + $store = new WatchedItemStore( + $services->getDBLoadBalancer(), + new HashBagOStuff( [ 'maxKeys' => 100 ] ) + ); + $store->setStatsdDataFactory( RequestContext::getMain()->getStats() ); + return $store; + } + /////////////////////////////////////////////////////////////////////////// // NOTE: When adding a service here, don't forget to add a getter function // in the MediaWikiServices class. The convenience getter should just call diff --git a/includes/Services/CannotReplaceActiveServiceException.php b/includes/Services/CannotReplaceActiveServiceException.php new file mode 100644 index 0000000000..499307372d --- /dev/null +++ b/includes/Services/CannotReplaceActiveServiceException.php @@ -0,0 +1,43 @@ +extraInstantiationParams = $extraInstantiationParams; } + /** + * Destroys all contained service instances that implement the DestructibleService + * interface. This will render all services obtained from this MediaWikiServices + * instance unusable. In particular, this will disable access to the storage backend + * via any of these services. Any future call to getService() will throw an exception. + * + * @see resetGlobalInstance() + */ + public function destroy() { + foreach ( $this->getServiceNames() as $name ) { + $service = $this->peekService( $name ); + if ( $service !== null && $service instanceof DestructibleService ) { + $service->destroy(); + } + } + + $this->destroyed = true; + } + /** * @param array $wiringFiles A list of PHP files to load wiring information from. * Each file is loaded using PHP's include mechanism. Each file is expected to @@ -114,6 +138,28 @@ class ServiceContainer { return isset( $this->serviceInstantiators[$name] ); } + /** + * Returns the service instance for $name only if that service has already been instantiated. + * This is intended for situations where services get destroyed/cleaned up, so we can + * avoid creating a service just to destroy it again. + * + * @note Application logic should use getService() instead. + * + * @see getService(). + * + * @param string $name + * + * @return object|null The service instance, or null if the service has not yet been instantiated. + * @throws RuntimeException if $name does not refer to a known service. + */ + public function peekService( $name ) { + if ( !$this->hasService( $name ) ) { + throw new NoSuchServiceException( $name ); + } + + return isset( $this->services[$name] ) ? $this->services[$name] : null; + } + /** * @return string[] */ @@ -139,7 +185,7 @@ class ServiceContainer { Assert::parameterType( 'string', $name, '$name' ); if ( $this->hasService( $name ) ) { - throw new RuntimeException( 'Service already defined: ' . $name ); + throw new ServiceAlreadyDefinedException( $name ); } $this->serviceInstantiators[$name] = $instantiator; @@ -165,16 +211,78 @@ class ServiceContainer { Assert::parameterType( 'string', $name, '$name' ); if ( !$this->hasService( $name ) ) { - throw new RuntimeException( 'Service not defined: ' . $name ); + throw new NoSuchServiceException( $name ); } if ( isset( $this->services[$name] ) ) { - throw new RuntimeException( 'Cannot redefine a service that is already in use: ' . $name ); + throw new CannotReplaceActiveServiceException( $name ); } $this->serviceInstantiators[$name] = $instantiator; } + /** + * Disables a service. + * + * @note Attempts to call getService() for a disabled service will result + * in a DisabledServiceException. Calling peekService for a disabled service will + * return null. Disabled services are listed by getServiceNames(). A disabled service + * can be enabled again using redefineService(). + * + * @note If the service was already active (that is, instantiated) when getting disabled, + * and the service instance implements DestructibleService, destroy() is called on the + * service instance. + * + * @see redefineService() + * @see resetService() + * + * @param string $name The name of the service to disable. + * + * @throws RuntimeException if $name is not a known service. + */ + public function disableService( $name ) { + $this->resetService( $name ); + + $this->redefineService( $name, function() use ( $name ) { + throw new ServiceDisabledException( $name ); + } ); + } + + /** + * Resets a service by dropping the service instance. + * If the service instances implements DestructibleService, destroy() + * is called on the service instance. + * + * @warning This is generally unsafe! Other services may still retain references + * to the stale service instance, leading to failures and inconsistencies. Subclasses + * may use this method to reset specific services under specific instances, but + * it should not be exposed to application logic. + * + * @note This is declared final so subclasses can not interfere with the expectations + * disableService() has when calling resetService(). + * + * @see redefineService() + * @see disableService(). + * + * @param string $name The name of the service to reset. + * @param bool $destroy Whether the service instance should be destroyed if it exists. + * When set to false, any existing service instance will effectively be detached + * from the container. + * + * @throws RuntimeException if $name is not a known service. + */ + final protected function resetService( $name, $destroy = true ) { + Assert::parameterType( 'string', $name, '$name' ); + + $instance = $this->peekService( $name ); + + if ( $destroy && $instance instanceof DestructibleService ) { + $instance->destroy(); + } + + unset( $this->services[$name] ); + } + /** * Returns a service object of the kind associated with $name. * Services instances are instantiated lazily, on demand. @@ -189,10 +297,16 @@ class ServiceContainer { * * @param string $name The service name * - * @throws InvalidArgumentException if $name is not a known service. + * @throws NoSuchServiceException if $name is not a known service. + * @throws ServiceDisabledException if this container has already been destroyed. + * * @return object The service instance */ public function getService( $name ) { + if ( $this->destroyed ) { + throw new ContainerDisabledException(); + } + if ( !isset( $this->services[$name] ) ) { $this->services[$name] = $this->createService( $name ); } @@ -213,7 +327,7 @@ class ServiceContainer { array_merge( [ $this ], $this->extraInstantiationParams ) ); } else { - throw new InvalidArgumentException( 'Unknown service: ' . $name ); + throw new NoSuchServiceException( $name ); } return $service; diff --git a/includes/Services/ServiceDisabledException.php b/includes/Services/ServiceDisabledException.php new file mode 100644 index 0000000000..ae15b7cea5 --- /dev/null +++ b/includes/Services/ServiceDisabledException.php @@ -0,0 +1,43 @@ +scopedProfileOut( $ps_misc ); $ps_memcached = Profiler::instance()->scopedProfileIn( $fname . '-memcached' ); -$wgMemc = wfGetMainCache(); +$wgMemc = ObjectCache::getLocalClusterInstance(); $messageMemc = wfGetMessageCacheStorage(); $parserMemc = wfGetParserCacheStorage(); diff --git a/includes/WatchedItemStore.php b/includes/WatchedItemStore.php index 8ae7932be0..603bacd1cd 100644 --- a/includes/WatchedItemStore.php +++ b/includes/WatchedItemStore.php @@ -1,6 +1,7 @@ getWatchedItemStore() * @return self */ public static function getDefaultInstance() { - if ( !self::$instance ) { - self::$instance = new self( - wfGetLB(), - new HashBagOStuff( [ 'maxKeys' => 100 ] ) - ); - self::$instance->setStatsdDataFactory( RequestContext::getMain()->getStats() ); - } - return self::$instance; + return MediaWikiServices::getInstance()->getWatchedItemStore(); } private function getCacheKey( User $user, LinkTarget $target ) { diff --git a/includes/api/i18n/es.json b/includes/api/i18n/es.json index bbb8656992..40d12f4b83 100644 --- a/includes/api/i18n/es.json +++ b/includes/api/i18n/es.json @@ -286,7 +286,7 @@ "apihelp-parse-example-summary": "Analizar un resumen.", "apihelp-patrol-description": "Verificar una página o revisión.", "apihelp-patrol-param-rcid": "Identificador de cambios recientes que verificar.", - "apihelp-patrol-param-revid": "ID de revisión a patrullar.", + "apihelp-patrol-param-revid": "Identificador de revisión que patrullar.", "apihelp-patrol-example-rcid": "Verificar un cambio reciente.", "apihelp-patrol-example-revid": "Verificar una revisión.", "apihelp-protect-description": "Cambiar el nivel de protección de una página.", diff --git a/includes/api/i18n/lb.json b/includes/api/i18n/lb.json index 8ac4d51f0b..76fd47daf4 100644 --- a/includes/api/i18n/lb.json +++ b/includes/api/i18n/lb.json @@ -56,7 +56,7 @@ "apihelp-help-example-recursive": "All Hëllef op enger Säit", "apihelp-imagerotate-description": "Eent oder méi Biller dréinen.", "apihelp-imagerotate-example-generator": "All Biller an der Category:Flip]] ëm 180 Grad dréinen.", - "apihelp-import-param-summary": "Resumé importéieren.", + "apihelp-import-param-summary": "Resumé vum importéiere vum Logbuch.", "apihelp-import-param-xml": "Eropgeluedenen XML-Fichier.", "apihelp-import-param-rootpage": "Als Ënnersäit vun dëser Säit importéieren. Kann net zesumme mam $1namespace benotzt ginn.", "apihelp-login-param-name": "Benotzernumm.", diff --git a/includes/config/ConfigFactory.php b/includes/config/ConfigFactory.php index 4b803d8eaf..09b0baa7be 100644 --- a/includes/config/ConfigFactory.php +++ b/includes/config/ConfigFactory.php @@ -51,16 +51,39 @@ class ConfigFactory { } /** - * Register a new config factory function - * Will override if it's already registered + * @return string[] + */ + public function getConfigNames() { + return array_keys( $this->factoryFunctions ); + } + + /** + * Register a new config factory function. + * Will override if it's already registered. + * Use "*" for $name to provide a fallback config for all unknown names. * @param string $name - * @param callable $callback That takes this ConfigFactory as an argument + * @param callable|Config $callback A factory callabck that takes this ConfigFactory + * as an argument and returns a Config instance, or an existing Config instance. * @throws InvalidArgumentException If an invalid callback is provided */ public function register( $name, $callback ) { + if ( $callback instanceof Config ) { + $instance = $callback; + + // Register a callback anyway, for consistency. Note that getConfigNames() + // relies on $factoryFunctions to have all config names. + $callback = function() use ( $instance ) { + return $instance; + }; + } else { + $instance = null; + } + if ( !is_callable( $callback ) ) { throw new InvalidArgumentException( 'Invalid callback provided' ); } + + $this->configs[$name] = $instance; $this->factoryFunctions[$name] = $callback; } @@ -75,10 +98,14 @@ class ConfigFactory { */ public function makeConfig( $name ) { if ( !isset( $this->configs[$name] ) ) { - if ( !isset( $this->factoryFunctions[$name] ) ) { + $key = $name; + if ( !isset( $this->factoryFunctions[$key] ) ) { + $key = '*'; + } + if ( !isset( $this->factoryFunctions[$key] ) ) { throw new ConfigException( "No registered builder available for $name." ); } - $conf = call_user_func( $this->factoryFunctions[$name], $this ); + $conf = call_user_func( $this->factoryFunctions[$key], $this ); if ( $conf instanceof Config ) { $this->configs[$name] = $conf; } else { @@ -88,4 +115,5 @@ class ConfigFactory { return $this->configs[$name]; } + } diff --git a/includes/context/RequestContext.php b/includes/context/RequestContext.php index c8b8108830..ba54603305 100644 --- a/includes/context/RequestContext.php +++ b/includes/context/RequestContext.php @@ -23,6 +23,7 @@ */ use MediaWiki\Logger\LoggerFactory; +use MediaWiki\MediaWikiServices; /** * Group all the pieces relevant to the context of a request into one instance @@ -496,9 +497,8 @@ class RequestContext implements IContextSource, MutableContext { * Resets singleton returned by getMain(). Should be called only from unit tests. */ public static function resetMain() { - if ( !( defined( 'MW_PHPUNIT_TEST' ) || defined( 'MW_PARSER_TEST' ) ) ) { - throw new MWException( __METHOD__ . '() should be called only from unit tests!' ); - } + // TODO: manage service instances in MediaWikiServices + MediaWikiServices::failUnlessBootstrapping( __METHOD__ ); self::$instance = null; } diff --git a/includes/db/loadbalancer/LBFactory.php b/includes/db/loadbalancer/LBFactory.php index a484bb44bd..549a8b5fab 100644 --- a/includes/db/loadbalancer/LBFactory.php +++ b/includes/db/loadbalancer/LBFactory.php @@ -21,6 +21,8 @@ * @ingroup Database */ +use MediaWiki\MediaWikiServices; +use MediaWiki\Services\DestructibleService; use Psr\Log\LoggerInterface; use MediaWiki\Logger\LoggerFactory; @@ -28,7 +30,8 @@ use MediaWiki\Logger\LoggerFactory; * An interface for generating database load balancers * @ingroup Database */ -abstract class LBFactory { +abstract class LBFactory implements DestructibleService { + /** @var ChronologyProtector */ protected $chronProt; @@ -38,9 +41,6 @@ abstract class LBFactory { /** @var LoggerInterface */ protected $logger; - /** @var LBFactory */ - private static $instance; - /** @var string|bool Reason all LBs are read-only or false if not */ protected $readOnlyReason = false; @@ -60,38 +60,40 @@ abstract class LBFactory { $this->logger = LoggerFactory::getInstance( 'DBTransaction' ); } + /** + * Disables all load balancers. All connections are closed, and any attempt to + * open a new connection will result in a DBAccessError. + * @see LoadBalancer::disable() + */ + public function destroy() { + $this->shutdown(); + $this->forEachLBCallMethod( 'disable' ); + } + /** * Disables all access to the load balancer, will cause all database access * to throw a DBAccessError */ public static function disableBackend() { - global $wgLBFactoryConf; - self::$instance = new LBFactoryFake( $wgLBFactoryConf ); + MediaWikiServices::disableStorageBackend(); } /** * Get an LBFactory instance * + * @deprecated since 1.27, use MediaWikiServices::getDBLoadBalancerFactory() instead. + * * @return LBFactory */ public static function singleton() { - global $wgLBFactoryConf; - - if ( is_null( self::$instance ) ) { - $class = self::getLBFactoryClass( $wgLBFactoryConf ); - $config = $wgLBFactoryConf; - if ( !isset( $config['readOnlyReason'] ) ) { - $config['readOnlyReason'] = wfConfiguredReadOnlyReason(); - } - self::$instance = new $class( $config ); - } - - return self::$instance; + return MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); } /** * Returns the LBFactory class to use and the load balancer configuration. * + * @todo instead of this, use a ServiceContainer for managing the different implementations. + * * @param array $config (e.g. $wgLBFactoryConf) * @return string Class name */ @@ -118,27 +120,6 @@ abstract class LBFactory { return $class; } - /** - * Shut down, close connections and destroy the cached instance. - */ - public static function destroyInstance() { - if ( self::$instance ) { - self::$instance->shutdown(); - self::$instance->forEachLBCallMethod( 'closeAll' ); - self::$instance = null; - } - } - - /** - * Set the instance to be the given object - * - * @param LBFactory $instance - */ - public static function setInstance( $instance ) { - self::destroyInstance(); - self::$instance = $instance; - } - /** * Create a new load balancer object. The resulting object will be untracked, * not chronology-protected, and the caller is responsible for cleaning it up. @@ -473,8 +454,7 @@ abstract class LBFactory { */ class DBAccessError extends MWException { public function __construct() { - parent::__construct( "Mediawiki tried to access the database via wfGetDB(). " . - "This is not allowed." ); + parent::__construct( 'The storage backend is disabled!' ); } } diff --git a/includes/db/loadbalancer/LoadBalancer.php b/includes/db/loadbalancer/LoadBalancer.php index 741999c53d..557809905c 100644 --- a/includes/db/loadbalancer/LoadBalancer.php +++ b/includes/db/loadbalancer/LoadBalancer.php @@ -77,6 +77,11 @@ class LoadBalancer { /** @var integer Max time to wait for a slave to catch up (e.g. ChronologyProtector) */ const POS_WAIT_TIMEOUT = 10; + /** + * @var boolean + */ + private $disabled = false; + /** * @param array $params Array with keys: * - servers : Required. Array of server info structures. @@ -666,6 +671,8 @@ class LoadBalancer { * On error, returns false, and the connection which caused the * error will be available via $this->mErrorConnection. * + * @note If disable() was called on this LoadBalancer, this method will throw a DBAccessError. + * * @param int $i Server index * @param string|bool $wiki Wiki ID, or false for the current wiki * @return DatabaseBase|bool Returns false on errors @@ -716,6 +723,8 @@ class LoadBalancer { * On error, returns false, and the connection which caused the * error will be available via $this->mErrorConnection. * + * @note If disable() was called on this LoadBalancer, this method will throw a DBAccessError. + * * @param int $i Server index * @param string $wiki Wiki ID to open * @return DatabaseBase @@ -803,6 +812,10 @@ class LoadBalancer { * @return DatabaseBase */ protected function reallyOpenConnection( $server, $dbNameOverride = false ) { + if ( $this->disabled ) { + throw new DBAccessError(); + } + if ( !is_array( $server ) ) { throw new MWException( 'You must update your load-balancing configuration. ' . 'See DefaultSettings.php entry for $wgDBservers.' ); @@ -976,6 +989,17 @@ class LoadBalancer { return false; } + /** + * Disable this load balancer. All connections are closed, and any attempt to + * open a new connection will result in a DBAccessError. + * + * @since 1.27 + */ + public function disable() { + $this->closeAll(); + $this->disabled = true; + } + /** * Close all open connections */ diff --git a/includes/installer/DatabaseInstaller.php b/includes/installer/DatabaseInstaller.php index 79bd961d47..701403ea8f 100644 --- a/includes/installer/DatabaseInstaller.php +++ b/includes/installer/DatabaseInstaller.php @@ -287,8 +287,16 @@ abstract class DatabaseInstaller { if ( !$status->isOK() ) { throw new MWException( __METHOD__ . ': unexpected DB connection error' ); } - LBFactory::setInstance( new LBFactorySingle( [ - 'connection' => $status->value ] ) ); + + \MediaWiki\MediaWikiServices::resetGlobalInstance(); + $services = \MediaWiki\MediaWikiServices::getInstance(); + + $connection = $status->value; + $services->redefineService( 'DBLoadBalancerFactory', function() use ( $connection ) { + return new LBFactorySingle( [ + 'connection' => $connection ] ); + } ); + } /** diff --git a/includes/installer/Installer.php b/includes/installer/Installer.php index 3d1c8600bd..97214dafbf 100644 --- a/includes/installer/Installer.php +++ b/includes/installer/Installer.php @@ -351,37 +351,67 @@ abstract class Installer { */ abstract public function showStatusMessage( Status $status ); + /** + * Constructs a Config object that contains configuration settings that should be + * overwritten for the installation process. + * + * @since 1.27 + * + * @param Config $baseConfig + * + * @return Config The config to use during installation. + */ + public static function getInstallerConfig( Config $baseConfig ) { + $configOverrides = new HashConfig(); + + // disable (problematic) object cache types explicitly, preserving all other (working) ones + // bug T113843 + $emptyCache = [ 'class' => 'EmptyBagOStuff' ]; + + $objectCaches = [ + CACHE_NONE => $emptyCache, + CACHE_DB => $emptyCache, + CACHE_ANYTHING => $emptyCache, + CACHE_MEMCACHED => $emptyCache, + ] + $baseConfig->get( 'ObjectCaches' ); + + $configOverrides->set( 'ObjectCaches', $objectCaches ); + + // Load the installer's i18n. + $messageDirs = $baseConfig->get( 'MessagesDirs' ); + $messageDirs['MediawikiInstaller'] = __DIR__ . '/i18n'; + + $configOverrides->set( 'MessagesDirs', $messageDirs ); + + return new MultiConfig( [ $configOverrides, $baseConfig ] ); + } + /** * Constructor, always call this from child classes. */ public function __construct() { - global $wgMessagesDirs, $wgUser; + global $wgMemc, $wgUser; + + $defaultConfig = new GlobalVarConfig(); // all the stuff from DefaultSettings.php + $installerConfig = self::getInstallerConfig( $defaultConfig ); + + // Reset all services and inject config overrides + MediaWiki\MediaWikiServices::resetGlobalInstance( $installerConfig ); // Don't attempt to load user language options (T126177) // This will be overridden in the web installer with the user-specified language RequestContext::getMain()->setLanguage( 'en' ); // Disable the i18n cache + // TODO: manage LocalisationCache singleton in MediaWikiServices Language::getLocalisationCache()->disableBackend(); - // Disable LoadBalancer and wfGetDB etc. - LBFactory::disableBackend(); + + // Disable all global services, since we don't have any configuration yet! + MediaWiki\MediaWikiServices::disableStorageBackend(); // Disable object cache (otherwise CACHE_ANYTHING will try CACHE_DB and // SqlBagOStuff will then throw since we just disabled wfGetDB) - $GLOBALS['wgMemc'] = new EmptyBagOStuff; - ObjectCache::clear(); - $emptyCache = [ 'class' => 'EmptyBagOStuff' ]; - // disable (problematic) object cache types explicitly, preserving all other (working) ones - // bug T113843 - $GLOBALS['wgObjectCaches'] = [ - CACHE_NONE => $emptyCache, - CACHE_DB => $emptyCache, - CACHE_ANYTHING => $emptyCache, - CACHE_MEMCACHED => $emptyCache, - ] + $GLOBALS['wgObjectCaches']; - - // Load the installer's i18n. - $wgMessagesDirs['MediawikiInstaller'] = __DIR__ . '/i18n'; + $wgMemc = ObjectCache::getInstance( CACHE_NONE ); // Having a user with id = 0 safeguards us from DB access via User::loadOptions(). $wgUser = User::newFromId( 0 ); diff --git a/includes/installer/i18n/he.json b/includes/installer/i18n/he.json index 1c9fe792f9..6bc3fd905d 100644 --- a/includes/installer/i18n/he.json +++ b/includes/installer/i18n/he.json @@ -59,20 +59,20 @@ "config-unicode-update-warning": "'''אזהרה''': הגרסה המותקנת של מעטפת נרמול יוניקוד משתמשת בגרסה ישנה של הספרייה של [http://site.icu-project.org/ פרויקט ICU].\nכדאי [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations לעדכן] אם הטיפול ביוניקוד חשוב לך.", "config-no-db": "לא נמצא דרייבר מסד נתונים מתאים. יש להתקין דרייבר מסד נתונים ל־PHP.\n{{PLURAL:$2|נתמך הסוג הבא של מסד נתונים|נתמכים הסוגים הבאים של מסדי נתונים}}: $1.\n\nאם קִמפלת את PHP בעצמך, יש להגדיר אותו מחדש ולהפעיל את לקוח מסד נתונים, למשל באמצעות ./configure --with-mysqli.\nאם התקנת את PHP מחבילה של דביאן או של אובונטו, יש להתקין, למשל, גם את המודול php5-mysql.", "config-outdated-sqlite": "'''אזהרה''': במערכת מתוקן SQLite $1. גרסה זו לא נתמכת ולשימוש ב־SQLite נדרשת גרסה $2 לפחות. SQLlite לא יהיה זמין.", - "config-no-fts3": "'''אזהרה''': SQLite מקומפל ללא [//sqlite.org/fts3.html מודול FTS]. יכולות חיפוש לא יהיו זמינות בהתקנה הזאת.", + "config-no-fts3": "'''אזהרה''': SQLite מהודר ללא [//sqlite.org/fts3.html מודול FTS]. יכולות חיפוש לא יהיו זמינות בהתקנה הזאת.", "config-mbstring": "'''שגיאה סופנית''': האפשרות [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] פעילה!'''\nהאפשרות הזאת גורמת לשגיאות ומעוותת את נתוני הקלט באופן בלתי־צפוי.\nלא ניתן להתקין את מדיה־ויקי או להשתמש בה אלא אם האפשרות הזאת תכובה.", "config-xml-bad": "מודול XML של PHP חסר.\nמדיה־ויקי דורשת פונקציות של המודול ולא תעבוד עם הגדרות כאלו.\nייתכן שצריך להתקין באמצעות RPM את חבילת php-xml.", "config-pcre-old": "שגיאה סופנית: חובה להתקין PCRE מגרסה $1 או גרסה חדשה יותר.\nקובץ הרצת ה־PHP שלך מקושר עם PCRE מגרסה $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE מידע נוסף].", - "config-pcre-no-utf8": "'''שגיאה סופנית''': נראה שמודול PCRE של PHP מקומפל ללא תמיכה ב־PCRE_UTF8.\nמדיה־ויקי דורשת תמיכה ב־UTF-8 לפעילות נכונה.", + "config-pcre-no-utf8": "שגיאה סופנית: נראה שמודול PCRE של PHP מהודר ללא תמיכה ב־PCRE_UTF8.\nמדיה־ויקי דורשת תמיכה ב־UTF-8 לפעילות נכונה.", "config-memory-raised": "ערך האפשרות memory_limit של PHP הוא $1, הועלה ל־$2.", "config-memory-bad": "'''אזהרה:''' ערך האפשרות memory_limit של PHP הוא $1.\nזה כנראה נמוך מדי.\nההתקנה עשויה להיכשל!", "config-ctype": "שגיאה סופנית: נדרשת גרסת PHP שתומכת בהרחבה [http://www.php.net/manual/en/ctype.installation.php Ctype].", - "config-iconv": "סופני: חובה לקמפל את PHP עם תמיכה ב[הרחבה http://www.php.net/manual/en/iconv.installation.php iconv].", + "config-iconv": "סופני: חובה להדר את PHP עם תמיכה ב[הרחבה http://www.php.net/manual/en/iconv.installation.php iconv].", "config-json": "'''שגיאה סופנית:''' PHP קומפל ללא תמיכה ב־JSON.\nיש להתקין את ההרחהב JSON ב־PHP או את ההרחבה [http://pecl.php.net/package/jsonc PECL jsonc] לפני התקנת מדיה־ויקי.\n* ההרחבה ל־PHP כלולה ב־Red Hat Enterprise Linux (ו־CentOS), אך יש להפעיל אותה ב־/etc/php.ini או ב־/etc/php.d/json.ini.", + "config-mbstring-absent": "סופני: חובה להדר את PHP עם תמיכה ב[הרחבה http://www.php.net/manual/en/mbstring.setup.php mbstring].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] מותקן", "config-apc": "[http://www.php.net/apc APC] מותקן", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] מותקן", - "config-no-cache": "'''אזהרה:''' אחת מהתוכנות הבאות לא נמצאה: [http://www.php.net/apc APC]‏, [http://xcache.lighttpd.net/ XCache] או [http://www.iis.net/download/WinCacheForPhp WinCache].\nמטמון עצמים לא מופעל.", "config-no-cache-apcu": "אזהרה: לא נמצא [http://www.php.net/apcu APCu]‏, [http://xcache.lighttpd.net/ XCache] או [http://www.iis.net/download/WinCacheForPhp WinCache].\nמטמון עצמים לא מופעל.", "config-mod-security": "'''אזהרה''': בשרת הווב שלך מופעל [http://modsecurity.org/ mod_security]. אם הוא לא מוגדר טוב, זה יכול לגרום לבעיות במדיה־ויקי ובתכנה אחרת שמאפשרת למשתמשים לשלוח תוכן שרירותי.\nיש לקרוא את [http://modsecurity.org/documentation/ התיעוד של mod_security] או ליצור קשר עם אנשי התמיכה של שירותי האירוח שלכם אם מופיעות לך שגיאות אקראיות.", "config-diff3-bad": "GNU diff3 לא נמצא.", @@ -193,7 +193,7 @@ "config-ns-site-name": "זהה לשם הוויקי: $1", "config-ns-other": "אחר (לציין)", "config-ns-other-default": "הוויקי שלי", - "config-project-namespace-help": "בהתאם לדוגמה של ויקיפדיה, אתרי ויקי רבים שומרים על דפי המדיניות שלהם בנפרד מדפי התוכן שלהם ב\"'''מרחב השמות של המיזם'''\" (\"'''project namespace'''\").\nכל שמות הדפים במרחב השמות הזה מתחילים בתחילית מסוימת שאפשר להגדיר כאן.\nבדרך כלל התחילית הזאת מבוססת על שם הוויקי, והיא אינה יכולה להכיל תווי פיסוק כגון \"#\" או \":\".", + "config-project-namespace-help": "בהתאם לדוגמה של ויקיפדיה, אתרי ויקי רבים שומרים על דפי המדיניות שלהם בנפרד מדפי התוכן שלהם ב'''מרחב השמות של המיזם''' (באנגלית: '''project namespace''').\nכל שמות הדפים במרחב השמות הזה מתחילים בתחילית מסוימת שאפשר להגדיר כאן.\nבדרך כלל התחילית הזאת מבוססת על שם הוויקי, והיא אינה יכולה להכיל תווי פיסוק כגון \"#\" או \":\".", "config-ns-invalid": "מרחב השמות \"$1\" אינו תקין.\nיש להקליד שם אחר למרחב השמות של המיזם.", "config-ns-conflict": "מרחב השמות שהגדרת \"$1\" מתנגש עם מרחב שמות מובנה של מדיה־ויקי.\nהגדירו מרחב שמות מיזם שונה.", "config-admin-box": "חשבון מפעיל", @@ -314,12 +314,12 @@ "config-install-mainpage": "יצירת דף ראשי עם תוכן התחלתי", "config-install-extension-tables": "יצירת טבלאות להרחבות מופעלות", "config-install-mainpage-failed": "לא הצליחה הכנסת דף ראשי: $1.", - "config-install-done": "'''מזל טוב!'''\nהתקנתם בהצלחה את מדיה־ויקי.\n\nתוכנת ההתקנה יצרה את הקובץ LocalSettings.php.\nהוא מכיל את כל ההגדרות שלכם.\n\nתצטרכו להוריד אותו ולשים אותו בבסיס ההתקנה של הוויקי שלכם (אותה התיקייה שבה נמצא הקובץ index.php). ההורדה הייתה אמורה להתחיל באופן אוטומטי.\n\nאם ההורדה לא התחילה, או אם ביטלתם אותה, אפשר להתחיל אותה מחדש בלחיצה על הקישור הבא:\n\n$3\n\n'''שימו לב''': אם לא תעשו זאת עכשיו, קובץ ההגדרות המחוּלל לא יהיה זמין לכם שוב.\n\nאחרי שתעשו את זה, תוכלו '''[$2 להיכנס לוויקי שלכם]'''.", + "config-install-done": "מזל טוב!\nהתקנתם בהצלחה את מדיה־ויקי.\n\nתוכנת ההתקנה יצרה את הקובץ LocalSettings.php.\nהוא מכיל את כל ההגדרות שלכם.\n\nתצטרכו להוריד אותו ולשים אותו בבסיס ההתקנה של הוויקי שלכם (אותה התיקייה שבה נמצא הקובץ index.php). ההורדה הייתה אמורה להתחיל באופן אוטומטי.\n\nאם ההורדה לא התחילה, או אם ביטלתם אותה, אפשר להתחיל אותה מחדש בלחיצה על הקישור הבא:\n\n$3\n\nשימו לב: אם לא תעשו זאת עכשיו, קובץ ההגדרות המחוּלל לא יהיה זמין לכם שוב.\n\nאחרי שתעשו את זה, תוכלו [$2 להיכנס לוויקי שלכם].", "config-download-localsettings": "הורדת LocalSettings.php", "config-help": "עזרה", "config-help-tooltip": "להרחיב", "config-nofile": "הקובץ \"$1\" לא נמצא. האם הוא נמחק?", "config-extension-link": "הידעת שמדיה־ויקי תומכת ב־[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions הרחבות]?\n\nבאפשרותך לעיין ב־[//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category הרחבות לפי קטגוריה].", - "mainpagetext": "'''תוכנת מדיה־ויקי הותקנה בהצלחה.'''", + "mainpagetext": "תוכנת מדיה־ויקי הותקנה בהצלחה.", "mainpagedocfooter": "היעזרו ב[//meta.wikimedia.org/wiki/Help:Contents מדריך למשתמש] למידע על שימוש בתוכנת הוויקי.\n\n== קישורים שימושיים ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings רשימת ההגדרות]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ שאלות ותשובות על מדיה־ויקי]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה על השקת גרסאות]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources תרגום מדיה־ויקי לשפה שלך]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam איך להיאבק נגד ספאם באתר הוויקי שלך]" } diff --git a/includes/installer/i18n/pt.json b/includes/installer/i18n/pt.json index 9b458309ba..e0affaf3d0 100644 --- a/includes/installer/i18n/pt.json +++ b/includes/installer/i18n/pt.json @@ -15,7 +15,8 @@ "Imperadeiro98", "Cainamarques", "Vitorvicentevalente", - "Macofe" + "Macofe", + "Diniscoelho" ] }, "config-desc": "O instalador do MediaWiki", @@ -326,5 +327,5 @@ "config-nofile": "Não foi possível encontrar o ficheiro \"$1\". Terá sido apagado?", "config-extension-link": "Sabia que a sua wiki suporta [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nPode procurar [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria].", "mainpagetext": "MediaWiki instalado.", - "mainpagedocfooter": "Consulte o [//meta.wikimedia.org/wiki/Help:Contents Guia de Utilizadores] para informações sobre o uso do software wiki.\n\n== Onde começar ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de opções de configuração]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Perguntas e respostas frequentes sobre o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Subscreva a lista de divulgação de novas versões do MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Regionalize MediaWiki para seu idioma]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Aprenda a combater o spam na sua wiki]" + "mainpagedocfooter": "Consulte o [//meta.wikimedia.org/wiki/Help:Contents Guia de Utilizadores] para informações sobre o uso do software wiki.\n\n== Onde começar ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de opções de configuração]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Perguntas e respostas frequentes sobre o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Subscreva a lista de divulgação de novas versões do MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Regionalize o MediaWiki para seu idioma]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Aprenda a combater spam na sua wiki]" } diff --git a/includes/installer/i18n/sv.json b/includes/installer/i18n/sv.json index b54c65a436..3ab0c806d5 100644 --- a/includes/installer/i18n/sv.json +++ b/includes/installer/i18n/sv.json @@ -61,12 +61,7 @@ "config-no-db": "Kunde inte hitta en lämplig databasdrivrutin! Du mÃ¥ste installera en databasdrivrutin för PHP.\nFöljande databas{{PLURAL:$2|typ |typer}} stöds: $1.\n\nI du själv kompilerat din PHP, konfigurera den med en databasklient aktiverad genom att t.ex. använda ./configure --with-mysqli.\nOm du installerade PHP frÃ¥n ett Debian- eller Ubuntupaket mÃ¥ste du även installera, t.ex. php5-mysql-paketet.", "config-outdated-sqlite": "'''Varning:''' du har SQLite $1, vilket är lägre än minimikravet version $2. SQLite kommer inte att vara tillgänglig.", "config-no-fts3": "'''Varning:''' SQLite kompileras utan [//sqlite.org/fts3.html FTS3-modulen], sökfunktioner kommer att vara otillgängliga pÃ¥ denna backend.", - "config-register-globals-error": "Fel: PHP-alternativet [http://php.net/register_globals register_globals] är aktiverad.\nDen mÃ¥ste vara inaktiverad för att fortsätta med installationen.\nSe [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] för hjälp om hur man gör sÃ¥.", - "config-magic-quotes-gpc": "Kritiskt: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_gpc är aktiv!\nDetta alternativ korrumperar inmatad data oförutsägbart.\nDu kan inte installera eller använda MediaWiki om detta alternativ är aktiverat.", - "config-magic-quotes-runtime": "'''Kritiskt: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] är aktiv!'''\nDetta alternativ korrumperar inmatad data oförutsägbart.\nDu kan inte installera eller använda MediaWiki om detta alternativ är aktiverat.", - "config-magic-quotes-sybase": "'''Kritiskt: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] är aktiv!'''\nDetta alternativ korrumperar inmatad data oförutsägbart.\nDu kan inte installera eller använda MediaWiki om detta alternativ är aktiverat.", "config-mbstring": "'''Kritiskt: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] är aktiv!'''\nDetta alternativ orsakar fel och kan korrumpera data oförutsägbart.\nDu kan inte installera eller använda MediaWiki om detta alternativ är aktiverat.", - "config-safe-mode": "''' Varning:''' PHP:s [http://www.php.net/features.safe-mode felsäkra läge] är aktivt.\nDet kan orsaka problem, särskilt om du använder filuppladdningar och math-stöd.", "config-xml-bad": "PHP:s XML-modul saknas.\nMediaWiki kräver funktioner i denna modul och kommer inte att fungera i den här konfigurationen.\nDu kan behöva installera RPM-paketet för php-xml.", "config-pcre-old": "'''Kritiskt:''' PCRE $1 eller senare krävs.\nDin PHP-binär är länkad till PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mer information].", "config-pcre-no-utf8": "'''Kritiskt:''' PHP:s PCRE-modul verkar vara kompilerat utan PCRE_UTF8-stöd.\nMediaWiki kräver stöd för UTF-8 för att fungera korrekt.", @@ -75,10 +70,10 @@ "config-ctype": "'''Kritiskt:''' PHP mÃ¥ste kompileras med stöd för [http://www.php.net/manual/en/ctype.installation.php Ctype-tillägget].", "config-iconv": "Kritiskt: PHP mÃ¥ste kompileras med stöd för [http://www.php.net/manual/en/iconv.installation.php iconv-tillägget].", "config-json": "'''Varning:''' PHP kompilerades utan JSON-stöd.\nDu mÃ¥ste antingen installera PHP JSON-tillägget eller [http://pecl.php.net/package/jsonc PECL jsonc]-tillägget före installationen av MediaWiki.\n* PHP-tillägget är inkluderat i Red Hat Enterprise Linux (CentOS) 5 och 6, men mÃ¥ste aktiveras i /etc/php.ini eller /etc/php.d/json.ini.\n* Vissa Linux-distributioner släppta efter maj 2013 har utelämnat PHP-tillägget och har istället inkluderat PECL-tillägget som php5-json eller php-pecl-jsonc.", + "config-mbstring-absent": "'''Kritiskt:''' PHP mÃ¥ste kompileras med stöd för tillägget [http://www.php.net/manual/en/mbstring.setup.php mbstring mbstring].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] är installerat", "config-apc": "[http://www.php.net/apc APC] är installerat", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] är installerat", - "config-no-cache": "'''Varning:''' Kunde inte hitta [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] eller [http://www.iis.net/download/WinCacheForPhp WinCache].\nCachelagring av objekt är inte aktiverat.", "config-no-cache-apcu": "'''Varning:''' Kunde inte hitta [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] eller [http://www.iis.net/download/WinCacheForPhp WinCache].\nCachelagring av objekt är inte aktiverat.", "config-mod-security": "'''Varning:''' Din webbserver har [http://modsecurity.org/ mod_security] aktiverat. Om felaktigt konfigurerat kan den skapa problem för MediaWiki eller annan programvara som tillÃ¥ter användaren att posta godtyckligt innehÃ¥ll.\nTitta pÃ¥ [http://modsecurity.org/documentation/ mod_security-dokumentationen] eller kontakta din värd om du pÃ¥träffar slumpmässiga fel.", "config-diff3-bad": "GNU diff3 hittades inte.", @@ -199,7 +194,7 @@ "config-ns-site-name": "Samma som wikinamnet: $1", "config-ns-other": "Annan (specificera)", "config-ns-other-default": "MinWiki", - "config-project-namespace-help": "Per Wikipedias exempel hÃ¥ller mÃ¥nga wikis sina policy-sidor separata frÃ¥n innehÃ¥llssidorna i en \"'''projektnamnrymd'''\".\nAlla sidtitlar i denna namnrymd startar med ett visst prefix vilket du specificerar här.\nVanligtvis kan detta namn härledas frÃ¥n namnet pÃ¥ wikin, men den fÃ¥r inte innehÃ¥lla interpunktionstecken som exempelvis \"#\" eller \":\".", + "config-project-namespace-help": "Per Wikipedias exempel hÃ¥ller mÃ¥nga wikis sina policy-sidor separata frÃ¥n innehÃ¥llssidorna i en '''projektnamnrymd'''.\nAlla sidtitlar i denna namnrymd startar med ett visst prefix vilket du specificerar här.\nVanligtvis kan detta namn härledas frÃ¥n namnet pÃ¥ wikin, men den fÃ¥r inte innehÃ¥lla interpunktionstecken som exempelvis \"#\" eller \":\".", "config-ns-invalid": "Den angivna namnrymden \"$1\" är ogiltig.\nAnge en annan namnrymd för projektet.", "config-ns-conflict": "Den angivna namnrymden \"$1\" stÃ¥r i konflikt med en standardnamnrymd för MediaWiki.\nAnge en annan namnrymd för projektet.", "config-admin-box": "Administratörskonto", @@ -320,12 +315,12 @@ "config-install-mainpage": "Skapa huvudsida med standardinnehÃ¥ll", "config-install-extension-tables": "Skapar tabeller för aktiverade tillägg", "config-install-mainpage-failed": "Kunde inte infoga huvudsidan: $1", - "config-install-done": "'''Grattis!'''\nDu har installerat MediaWiki.\n\nInstallationsprogrammet har genererat filen LocalSettings.php.\nDet innehÃ¥ller alla dina konfigurationer.\n\nDu kommer att behöva ladda ner den och placera den i roten för din wiki-installation (samma katalog som index.php). Nedladdningen borde ha startats automatiskt.\n\nOm ingen nedladdning erbjöds, eller om du har avbrutit det kan du starta om nedladdningen genom att klicka pÃ¥ länken nedan:\n\n$3\n\n'''OBS''': Om du inte gör detta nu, kommer denna genererade konfigurationsfil inte vara tillgänglig för dig senare om du avslutar installationen utan att ladda ned den.\n\nNär det är klart, kan du '''[$2 gÃ¥ in pÃ¥ din wiki]'''.", + "config-install-done": "Grattis!\nDu har installerat MediaWiki.\n\nInstallationsprogrammet har genererat filen LocalSettings.php.\nDet innehÃ¥ller alla dina konfigurationer.\n\nDu kommer att behöva ladda ner den och placera den i roten för din wiki-installation (samma katalog som index.php). Nedladdningen borde ha startats automatiskt.\n\nOm ingen nedladdning erbjöds, eller om du har avbrutit det kan du starta om nedladdningen genom att klicka pÃ¥ länken nedan:\n\n$3\n\nOBS: Om du inte gör detta nu, kommer denna genererade konfigurationsfil inte vara tillgänglig för dig senare om du avslutar installationen utan att ladda ned den.\n\nNär det är klart, kan du [$2 gÃ¥ in pÃ¥ din wiki]", "config-download-localsettings": "Ladda ner LocalSettings.php", "config-help": "hjälp", "config-help-tooltip": "klicka för att expandera", "config-nofile": "Filen \"$1\" kunde inte hittas. Har den raderats?", "config-extension-link": "Visste du att din wiki stödjer [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions tillägg]?\n\nDu kan bläddra [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category tillägg efter kategori].", - "mainpagetext": "'''MediaWiki har installerats utan problem.'''", + "mainpagetext": "MediaWiki har installerats utan problem.", "mainpagedocfooter": "Information om hur wiki-programvaran används finns i [//meta.wikimedia.org/wiki/Help:Contents användarguiden].\n\n== Att komma igÃ¥ng ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista över konfigurationsinställningar]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-postlista för nya versioner av MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Lokalisera MediaWiki för ditt sprÃ¥k]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Läs om hur du bekämpar spam pÃ¥ din wiki]" } diff --git a/includes/logging/RightsLogFormatter.php b/includes/logging/RightsLogFormatter.php index b9dfb6c044..1fd4b7f364 100644 --- a/includes/logging/RightsLogFormatter.php +++ b/includes/logging/RightsLogFormatter.php @@ -33,12 +33,19 @@ class RightsLogFormatter extends LogFormatter { global $wgContLang, $wgUserrightsInterwikiDelimiter; if ( !$this->plaintext ) { - $text = $wgContLang->ucfirst( $title->getText() ); + $text = $wgContLang->ucfirst( $title->getDBkey() ); $parts = explode( $wgUserrightsInterwikiDelimiter, $text, 2 ); if ( count( $parts ) === 2 ) { - $titleLink = WikiMap::foreignUserLink( $parts[1], $parts[0], - htmlspecialchars( $title->getText() ) ); + $titleLink = WikiMap::foreignUserLink( + $parts[1], + $parts[0], + htmlspecialchars( + strtr( $parts[0], '_', ' ' ) . + $wgUserrightsInterwikiDelimiter . + $parts[1] + ) + ); if ( $titleLink !== false ) { return $titleLink; diff --git a/includes/media/Exif.php b/includes/media/Exif.php index 11178f42cc..95fa8594fc 100644 --- a/includes/media/Exif.php +++ b/includes/media/Exif.php @@ -174,8 +174,8 @@ class Exif { # Tags relating to image configuration 'ComponentsConfiguration' => Exif::UNDEFINED, # Meaning of each component #p33 'CompressedBitsPerPixel' => Exif::RATIONAL, # Image compression mode - 'PixelYDimension' => Exif::SHORT_OR_LONG, # Valid image width - 'PixelXDimension' => Exif::SHORT_OR_LONG, # Valid image height + 'PixelYDimension' => Exif::SHORT_OR_LONG, # Valid image height + 'PixelXDimension' => Exif::SHORT_OR_LONG, # Valid image width # Tags relating to related user information 'MakerNote' => Exif::IGNORE, # Manufacturer notes diff --git a/includes/session/SessionManager.php b/includes/session/SessionManager.php index fc73335244..28207124a1 100644 --- a/includes/session/SessionManager.php +++ b/includes/session/SessionManager.php @@ -23,6 +23,7 @@ namespace MediaWiki\Session; +use MediaWiki\MediaWikiServices; use Psr\Log\LoggerInterface; use BagOStuff; use CachedBagOStuff; @@ -1090,11 +1091,7 @@ final class SessionManager implements SessionManagerInterface { * Reset the internal caching for unit testing */ public static function resetCache() { - if ( !defined( 'MW_PHPUNIT_TEST' ) ) { - // @codeCoverageIgnoreStart - throw new MWException( __METHOD__ . ' may only be called from unit tests!' ); - // @codeCoverageIgnoreEnd - } + MediaWikiServices::failUnlessBootstrapping( __METHOD__ ); self::$globalSession = null; self::$globalSessionRequest = null; diff --git a/includes/site/SiteSQLStore.php b/includes/site/SiteSQLStore.php index a4116aea0f..bb645101ec 100644 --- a/includes/site/SiteSQLStore.php +++ b/includes/site/SiteSQLStore.php @@ -23,6 +23,8 @@ * @file * @ingroup Site * + * @deprecated 1.27 use DBSiteStore and CachingSiteStore instead. + * * @license GNU GPL v2+ * @author Daniel Kinzler */ diff --git a/includes/user/CentralIdLookup.php b/includes/user/CentralIdLookup.php index f67a8d81a1..616ae93264 100644 --- a/includes/user/CentralIdLookup.php +++ b/includes/user/CentralIdLookup.php @@ -19,6 +19,7 @@ * * @file */ +use MediaWiki\MediaWikiServices; /** * The CentralIdLookup service allows for connecting local users with @@ -68,9 +69,8 @@ abstract class CentralIdLookup implements IDBAccessObject { * Reset internal cache for unit testing */ public static function resetCache() { - if ( !defined( 'MW_PHPUNIT_TEST' ) ) { - throw new MWException( __METHOD__ . ' may only be called from unit tests!' ); - } + // TODO: manage service instances in MediaWikiServices + MediaWikiServices::failUnlessBootstrapping( __METHOD__ ); self::$instances = []; } diff --git a/includes/user/User.php b/includes/user/User.php index e5bb08253b..04eba97b31 100644 --- a/includes/user/User.php +++ b/includes/user/User.php @@ -2694,14 +2694,36 @@ class User implements IDBAccessObject { return Status::newGood( true ); } + $type = $oldaddr != '' ? 'changed' : 'set'; + $notificationResult = null; + + if ( $wgEmailAuthentication ) { + // Send the user an email notifying the user of the change in registered + // email address on their previous email address + if ( $type == 'changed' ) { + $change = $str != '' ? 'changed' : 'removed'; + $notificationResult = $this->sendMail( + wfMessage( 'notificationemail_subject_' . $change )->text(), + wfMessage( 'notificationemail_body_' . $change, + $this->getRequest()->getIP(), + $this->getName(), + $str )->text() + ); + } + } + $this->setEmail( $str ); if ( $str !== '' && $wgEmailAuthentication ) { // Send a confirmation request to the new address if needed - $type = $oldaddr != '' ? 'changed' : 'set'; $result = $this->sendConfirmationMail( $type ); + + if ( $notificationResult !== null ) { + $result->merge( $notificationResult ); + } + if ( $result->isGood() ) { - // Say to the caller that a confirmation mail has been sent + // Say to the caller that a confirmation and notification mail has been sent $result->value = 'eauth'; } } else { diff --git a/languages/i18n/af.json b/languages/i18n/af.json index e03ef784e1..5e43c8b94d 100644 --- a/languages/i18n/af.json +++ b/languages/i18n/af.json @@ -2400,8 +2400,8 @@ "exif-colorspace": "Kleurruimte", "exif-componentsconfiguration": "Betekenis van elke komponent", "exif-compressedbitsperpixel": "Beeldkompressiemetode", - "exif-pixelydimension": "Beeldwydte", - "exif-pixelxdimension": "Beeldhoogte", + "exif-pixelxdimension": "Beeldwydte", + "exif-pixelydimension": "Beeldhoogte", "exif-usercomment": "Opmerkings", "exif-relatedsoundfile": "Verwante klanklêer", "exif-datetimeoriginal": "Gegewens opgestel op", diff --git a/languages/i18n/am.json b/languages/i18n/am.json index 4971ff7ebd..1977fdfc33 100644 --- a/languages/i18n/am.json +++ b/languages/i18n/am.json @@ -1656,8 +1656,8 @@ "exif-flashpixversion": "የተደገፈ Flashpix ዝርያ", "exif-componentsconfiguration": "የየክፍለ ነገሩ ትርጉም", "exif-compressedbitsperpixel": "የስዕል መጨመቅ ዘዴ", - "exif-pixelydimension": "እውነተኛ የስዕል ስፋት", - "exif-pixelxdimension": "እውነተኛ የስዕል ቁመት", + "exif-pixelxdimension": "እውነተኛ የስዕል ስፋት", + "exif-pixelydimension": "እውነተኛ የስዕል ቁመት", "exif-usercomment": "የተጠቃሚው ማጠቃለያ", "exif-relatedsoundfile": "የተዛመደ የድምጽ ፋይል", "exif-datetimeoriginal": "መረጃው የተፈጠረበት ቀንና ሰዓት", diff --git a/languages/i18n/an.json b/languages/i18n/an.json index 516a78033f..27e56abd36 100644 --- a/languages/i18n/an.json +++ b/languages/i18n/an.json @@ -2070,8 +2070,8 @@ "exif-colorspace": "Espacio de colors", "exif-componentsconfiguration": "Significación de cada component", "exif-compressedbitsperpixel": "Modo de compresión d'a imachen", - "exif-pixelydimension": "Amplaria d'a imachen", - "exif-pixelxdimension": "Altaria d'a imachen", + "exif-pixelxdimension": "Amplaria d'a imachen", + "exif-pixelydimension": "Altaria d'a imachen", "exif-usercomment": "Comentarios de l'usuario", "exif-relatedsoundfile": "Fichero d'audio relacionato", "exif-datetimeoriginal": "Calendata y hora de cheneración d'os datos", diff --git a/languages/i18n/ar.json b/languages/i18n/ar.json index 1ad03ef18f..447da763e0 100644 --- a/languages/i18n/ar.json +++ b/languages/i18n/ar.json @@ -2697,8 +2697,8 @@ "exif-colorspace": "فضاء الألوان", "exif-componentsconfiguration": "معنى كل مكونة", "exif-compressedbitsperpixel": "طور ضغط الصورة", - "exif-pixelydimension": "عرض الصورة", - "exif-pixelxdimension": "ارتفاع الصورة", + "exif-pixelxdimension": "عرض الصورة", + "exif-pixelydimension": "ارتفاع الصورة", "exif-usercomment": "تعليقات المستخدم", "exif-relatedsoundfile": "ملف صوتي مرتبط", "exif-datetimeoriginal": "تاريخ ووقت توليد البيانات", @@ -3253,7 +3253,6 @@ "redirect-not-exists": "المطلوب غير موجود", "fileduplicatesearch": "بحث عن ملفات مكررة", "fileduplicatesearch-summary": "ابحث عن الملفات المكررة بناء على قيم الهاش.", - "fileduplicatesearch-legend": "بحث عن مكرر", "fileduplicatesearch-filename": "اسم الملف:", "fileduplicatesearch-submit": "بحث", "fileduplicatesearch-info": "$1 × $2 بكسل
حجم الملف: $3
نوع MIME: $4", diff --git a/languages/i18n/ary.json b/languages/i18n/ary.json index 0f69f6a88d..3cade1d7ad 100644 --- a/languages/i18n/ary.json +++ b/languages/i18n/ary.json @@ -1628,8 +1628,8 @@ "exif-colorspace": "farq lon", "exif-componentsconfiguration": "maana kol mokawwin", "exif-compressedbitsperpixel": "tor daght sora", - "exif-pixelydimension": "ard sora sahih", - "exif-pixelxdimension": "tol sora sahih", + "exif-pixelxdimension": "ard sora sahih", + "exif-pixelydimension": "tol sora sahih", "exif-usercomment": "taaliqat lmostakhdim", "exif-relatedsoundfile": "milf sawti mortabit", "exif-datetimeoriginal": "tarikh o wqt tawlid lbayanat", diff --git a/languages/i18n/arz.json b/languages/i18n/arz.json index 91089cc615..a086c3e75d 100644 --- a/languages/i18n/arz.json +++ b/languages/i18n/arz.json @@ -1918,8 +1918,8 @@ "exif-colorspace": "فرق اللون", "exif-componentsconfiguration": "معنى كل مكون", "exif-compressedbitsperpixel": "طور ضغط الصورة", - "exif-pixelydimension": "عرض صورة صحيح", - "exif-pixelxdimension": "ارتفاع صورة صحيح", + "exif-pixelxdimension": "عرض صورة صحيح", + "exif-pixelydimension": "ارتفاع صورة صحيح", "exif-usercomment": "تعليقات اليوزر", "exif-relatedsoundfile": "ملف صوت مرتبط", "exif-datetimeoriginal": "تاريخ و وقت الإنتاج", diff --git a/languages/i18n/as.json b/languages/i18n/as.json index e702f3279f..fb04fa06a4 100644 --- a/languages/i18n/as.json +++ b/languages/i18n/as.json @@ -2417,8 +2417,8 @@ "exif-colorspace": "ৰং স্থান", "exif-componentsconfiguration": "প্ৰতিটো উপাদানৰ অৰ্থ", "exif-compressedbitsperpixel": "ছবি সংকোচন অৱস্থা", - "exif-pixelydimension": "ছবিৰ প্ৰস্থতা", - "exif-pixelxdimension": "ছবিৰ উচ্চতা", + "exif-pixelxdimension": "ছবিৰ প্ৰস্থতা", + "exif-pixelydimension": "ছবিৰ উচ্চতা", "exif-usercomment": "সদস্যৰ মন্তব্য", "exif-relatedsoundfile": "সংশ্লিষ্ট শ্ৰব্য ফাইল", "exif-datetimeoriginal": "তথ্য সৃজনৰ তাৰিখ আৰু সময়", diff --git a/languages/i18n/ast.json b/languages/i18n/ast.json index f547a60284..62e36244ac 100644 --- a/languages/i18n/ast.json +++ b/languages/i18n/ast.json @@ -469,7 +469,7 @@ "noemail": "L'usuariu «$1» nun tien rexistrada nenguna direición de corréu.", "noemailcreate": "Tienes de conseñar una direición de corréu válida.", "passwordsent": "Unvióse una contraseña nueva a la direición de corréu rexistrada pa «$1».\nPor favor vuelvi a aniciar sesión depués de recibila.", - "blocked-mailpassword": "La edición ta bloquiada dende la to direición IP, y por tanto nun se permite usar la función de recuperar contraseñes pa evitar abusos.", + "blocked-mailpassword": "La to direición IP tien bloquiada la edición. Pa torgar los abusos, nun se permite usar la recuperación de contraseñes dende esta direición IP.", "eauthentsent": "Unvióse un corréu electrónicu de confirmación a la direición indicada.\nEnantes de que s'unvie nengún otru corréu a la cuenta, has de siguir les instrucciones d'esi corréu pa confirmar que la cuenta ye daveres de to.", "throttled-mailpassword": "Yá s'unvió un corréu de reaniciu la clave {{PLURAL:$1|na postrer hora|nes postreres $1 hores}}.\nPa evitar abusos, namái s'unviará un corréu de reaniciu cada {{PLURAL:$1|hora|$1 hores}}.", "mailerror": "Fallu al unviar el corréu: $1", @@ -1493,6 +1493,7 @@ "uploadstash-badtoken": "Nun pudo facese esa operación. Seique caducó la identificación pa editar. Vuelve a tentalo.", "uploadstash-errclear": "Falló'l desaniciu de los ficheros.", "uploadstash-refresh": "Anovar la llista de ficheros", + "uploadstash-thumbnail": "ver miniatura", "invalid-chunk-offset": "Allugamientu inválidu del fragmentu", "img-auth-accessdenied": "Accesu denegáu", "img-auth-nopathinfo": "Falta PATH_INFO.\nEl to sirvidor nun ta configuráu pa pasar esta información.\nPue tar basáu en CGI y nun tener sofitu pa img_auth.\nVer https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization", @@ -2190,6 +2191,7 @@ "ipb-unblock": "Desbloquiar un nome d'usuariu o direición IP", "ipb-blocklist": "Ver los bloqueos esistentes", "ipb-blocklist-contribs": "Collaboraciones de {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "falten $1", "unblockip": "Desbloquiar usuariu", "unblockiptext": "Usa'l formulariu d'abaxo pa restablecer l'accesu d'escritura a una direicion IP o a un nome d'usuariu previamente bloquiáu.", "ipusubmit": "Desaniciar esti bloquéu", @@ -2431,11 +2433,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisión importada|revisiones importaes}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisión importada|revisiones importaes}} dende $2", "javascripttest": "Prueba de JavaScript", - "javascripttest-pagetext-noframework": "Esta páxina ta acutada pa executar pruebes de javascript.", - "javascripttest-pagetext-unknownframework": "L'entornu de pruebes «$1» ye desconocíu.", "javascripttest-pagetext-unknownaction": "Aición desconocida «$1».", - "javascripttest-pagetext-frameworks": "Escueyi un de los siguientes entornos de pruebes: $1", - "javascripttest-pagetext-skins": "Escueyi una apariencia pa executar les pruebes:", "javascripttest-qunit-intro": "Ver la [$1 documentación de les pruebes] en mediawiki.org.", "tooltip-pt-userpage": "La to páxina d'{{GENDER:|usuariu|usuaria}}", "tooltip-pt-anonuserpage": "La páxina d'usuariu de la IP cola que tas editando", @@ -2702,8 +2700,8 @@ "exif-colorspace": "Espaciu de color", "exif-componentsconfiguration": "Significáu de cada componente", "exif-compressedbitsperpixel": "Mou de compresión d'imaxe", - "exif-pixelydimension": "Anchor d'imaxe", - "exif-pixelxdimension": "Altor d'imaxe", + "exif-pixelxdimension": "Anchor d'imaxe", + "exif-pixelydimension": "Altor d'imaxe", "exif-usercomment": "Comentarios del usuariu", "exif-relatedsoundfile": "Archivu d'audiu rellacionáu", "exif-datetimeoriginal": "Data y hora de xeneración de los datos", @@ -3148,7 +3146,6 @@ "version-libraries-description": "Descripción", "version-libraries-authors": "Autores", "redirect": "Redireición por ID del ficheru, usuariu, páxina, revisión o rexistru", - "redirect-legend": "Redirixir a un ficheru o una páxina", "redirect-summary": "Esta páxina especial redirixe a un ficheru (dando'l so nome), una páxina (dando una ID de revisión o de páxina), una páxina d'usuariu (dando un númberu d'ID d'usuariu) o una entrada del rexistru (dando la ID del rexistru). Usu: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], o [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Dir", "redirect-lookup": "Buscar:", @@ -3161,7 +3158,6 @@ "redirect-not-exists": "Nun s'alcontró'l valor", "fileduplicatesearch": "Buscar archivos duplicaos", "fileduplicatesearch-summary": "Busca archivos duplicaos basándose nos sos valores fragmentarios.", - "fileduplicatesearch-legend": "Buscar duplicaos", "fileduplicatesearch-filename": "Nome del ficheru:", "fileduplicatesearch-submit": "Buscar", "fileduplicatesearch-info": "$1 × $2 píxeles
Tamañu del archivu: $3
Triba MIME: $4", @@ -3362,7 +3358,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protexó}} a $3 $4 [en cascada]", "logentry-protect-modify": "$1 {{GENDER:$2|camudó}} el nivel de protección de $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|camudó}} el nivel de protección de $3 $4 [en cascada]", - "logentry-rights-rights": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de $3 dende $4 a $5", + "logentry-rights-rights": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de {{GENDER:$3|$3}} dende $4 a $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de $3", "logentry-rights-autopromote": "$1 {{GENDER:$2|promocionó}} automáticamente de $4 a $5", "logentry-upload-upload": "$1 {{GENDER:$2|xubió}} $3", @@ -3455,6 +3451,7 @@ "api-error-unknownerror": "Fallu desconocíu: «$1».", "api-error-uploaddisabled": "Les xubíes tan desactivaes nesta wiki.", "api-error-verification-error": "Esti ficheru pudiera tar corrompíu, o tien una estensión incorreuta.", + "api-error-was-deleted": "Anteriormente xubióse y desanicióse dempués un ficheru con esti nome.", "duration-seconds": "$1 {{PLURAL:$1|segundu|segundos}}", "duration-minutes": "$1 {{PLURAL:$1|minutu|minutos}}", "duration-hours": "$1 {{PLURAL:$1|hora|hores}}", @@ -3545,6 +3542,7 @@ "special-characters-group-ipa": "AFI", "special-characters-group-symbols": "Símbolos", "special-characters-group-greek": "Griegu", + "special-characters-group-greekextended": "Griegu estendíu", "special-characters-group-cyrillic": "Cirílicu", "special-characters-group-arabic": "Árabe", "special-characters-group-arabicextended": "Árabe estendíu", @@ -3572,5 +3570,25 @@ "sessionprovider-generic": "sesiones $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "sesiones basaes en cookies", "sessionprovider-nocookies": "Les cookies puen tar desactivaes. Asegúrate de tener activaes les cookies y vuelve a principiar.", - "randomrootpage": "Páxina raíz al debalu" + "randomrootpage": "Páxina raíz al debalu", + "log-action-filter-block": "Tipu de bloquéu:", + "log-action-filter-delete": "Tipu de desaniciu:", + "log-action-filter-patrol": "Tipu de patrulla:", + "log-action-filter-protect": "Tipu de proteición:", + "log-action-filter-upload": "Tipu de carga:", + "log-action-filter-all": "Too", + "log-action-filter-block-block": "Bloquéu", + "log-action-filter-block-reblock": "Cambiu de bloquéu", + "log-action-filter-block-unblock": "Desbloquéu", + "log-action-filter-delete-delete": "Desaniciu de páxines", + "log-action-filter-delete-restore": "Restauración de páxines", + "log-action-filter-delete-event": "Desaniciu de rexistros", + "log-action-filter-delete-revision": "Desaniciu de revisión", + "log-action-filter-patrol-patrol": "Patrulláu manual", + "log-action-filter-patrol-autopatrol": "Patrulláu automáticu", + "log-action-filter-protect-protect": "Proteición", + "log-action-filter-protect-modify": "Cambiu na proteición", + "log-action-filter-protect-unprotect": "Desproteición", + "log-action-filter-upload-upload": "Nueva carga", + "log-action-filter-upload-overwrite": "Recargar" } diff --git a/languages/i18n/avk.json b/languages/i18n/avk.json index f4d4d28ec7..09906c45b2 100644 --- a/languages/i18n/avk.json +++ b/languages/i18n/avk.json @@ -1472,8 +1472,8 @@ "exif-exifversion": "Version exif", "exif-colorspace": "Ksevaxo", "exif-compressedbitsperpixel": "Ewavaraxivaracave", - "exif-pixelydimension": "Mante ke enafa ewava", - "exif-pixelxdimension": "Ontine ke enafa ewava", + "exif-pixelxdimension": "Mante ke enafa ewava", + "exif-pixelydimension": "Ontine ke enafa ewava", "exif-usercomment": "Favesikaf sebuks", "exif-relatedsoundfile": "Fichier audio lié", "exif-datetimeoriginal": "Viel is gemelt ke nasbara va origeem", diff --git a/languages/i18n/awa.json b/languages/i18n/awa.json index 6cb75d2895..0ee6435bd4 100644 --- a/languages/i18n/awa.json +++ b/languages/i18n/awa.json @@ -2406,8 +2406,8 @@ "exif-colorspace": "रंग स्थान", "exif-componentsconfiguration": "हर घटक कय मतलब", "exif-compressedbitsperpixel": "चित्र कॉम्प्रेशन मोड", - "exif-pixelydimension": "छवि चौड़ाई", - "exif-pixelxdimension": "छवि ऊँचाई", + "exif-pixelxdimension": "छवि चौड़ाई", + "exif-pixelydimension": "छवि ऊँचाई", "exif-usercomment": "सदस्य टिप्पणी", "exif-relatedsoundfile": "संबंधित ध्वनी फ़ाईल", "exif-datetimeoriginal": "डेटा सञ्चालन कय मिति अव समय", diff --git a/languages/i18n/az.json b/languages/i18n/az.json index 5a68e59539..34ecba8670 100644 --- a/languages/i18n/az.json +++ b/languages/i18n/az.json @@ -2003,8 +2003,8 @@ "exif-copyright": "Sahibinin müəlliflik hüququ", "exif-exifversion": "Exif versiyası", "exif-colorspace": "Rəng sahəsi", - "exif-pixelydimension": "Şəkilin eni", - "exif-pixelxdimension": "Şəkilin hündürlüyü", + "exif-pixelxdimension": "Şəkilin eni", + "exif-pixelydimension": "Şəkilin hündürlüyü", "exif-usercomment": "İstifadəçi şərhi", "exif-datetimeoriginal": "Orijinal tarix və vaxt", "exif-datetimedigitized": "Tarix və vaxt rəqəmləşdirilir", diff --git a/languages/i18n/azb.json b/languages/i18n/azb.json index 3ac6686c8d..0531723c34 100644 --- a/languages/i18n/azb.json +++ b/languages/i18n/azb.json @@ -592,7 +592,7 @@ "newarticle": "(یئنی)", "newarticletext": "مؤوجود اوْلمايان صحیفه‌‌يه اوْلان کئچیدی ایزله‌دینیز. \nآشاغیداکی ساحه‌‌يه مظمونونو يازاراق بۇ صحیفه‌‌نی '''سیز''' يارادا بیلرسینیز. (علاوه‌‌ معلومات اۆچون [$1 کؤمک صحیفه‌‌سینه] باخین). اگر بۇ صحیفه‌‌يه سهون گلمیسینیزسه ساده‌جه اوْلاراق براوزئرین '''گئری''' دۆيمه‌سینه وۇرون.", "anontalkpagetext": "''بو صحیفه قئیدیات‌دان کئچممیش و یا داخیل اولمامیش آنونیم ایستیفادچییه عایید موذاکیره صحیفه‌سی‌دیر.\nاونا گؤره بو ایستیفادچینی رقم‌لردن عبارت ایپ اونوانی ایله معین ائتمک مجبوریتیندییک.\nبئله ایپ اونوان بیر نئچه فرد طرفین‌دن ایستیفاده‌ده اولا بیلر.\nاگر سیز آنونیم ایستیفادچیسینیزسه و بو مئساژین سیزه عایید اولمادیغینی دوشونورسونوزسه، اوندا [[Special:UserLogin/signup|قئیدیات‌دان کئچین]] و یا [[Special:UserLogin|داخی اولون]].''", - "noarticletext": "ایندی بو صحیفه‌ده یازی یوخدور.\nسیز آیری صحیفه‌‌لرده [[Special:Search/{{PAGENAME}}|بو باشلیق اوچون آختارا بیلرسیز]]،\nیا دا [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ایلگیلی قئیدلری آختارا بیلرسیز]،\nیا دا [{{fullurl:{{FULLPAGENAME}}|action=edit}} بو صحیفه‌نی دَییشدیره بیلرسیز].", + "noarticletext": "ایندی بو صفحه‌ده یازی یوخدور.\nسیز آیری صفحه‌‌لرده [[Special:Search/{{PAGENAME}}|بو باشلیق اوچون آختارا بیلرسیز]]،\nیا دا [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} باغلی قئیدلری آختارا بیلرسیز]،\nیا دا [{{fullurl:{{FULLPAGENAME}}|action=edit}} بو صفحه‌نی دَییشدیره بیلرسیز].", "noarticletext-nopermission": "بو صحیفه‌‌ ایندی بوشدور. \nباشقا صحیفه‌‌لرده عینی آددا صحیفه‌‌نی [[Special:Search/{{PAGENAME}}| آختار]], علاقه‌‌لی قئيدلره \n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} باخا],\nو يا صحیفه‌‌نی [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktə] ائده بیلرسینیز.", "missing-revision": "«{{FULLPAGENAME}}» صحیفه‌سی اوچون $1 نومره‌لی نوسخه یوخدور.\n\nعموماُ بو ایشکال، واختی گئچمیش بیر باغلانتی ایله سیلینمیش بیر صحیفه‌یه گلنده، قاباغا گلر.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیلمک سیاهی]‌سینده باشقا بیلگیلر اولا بیلر.", "userpage-userdoesnotexist": "«$1» ایستیفاده‌چی حسابی یارانماییب‌دیر.\nبو صحیفه‌نی یارادماق یوخسا دَییشدیرمگینه بیر ده باخین.", @@ -1775,7 +1775,7 @@ "deleting-backlinks-warning": "'''اخطار:''' بو سیلمگه قصدینیز اولان صفحه‌یه، [[Special:WhatLinksHere/{{FULLPAGENAME}}|باشقا صفحه‌لر]] باغلانتی وئریب یا اونو اؤزلرین‌ده ایشلدیب‌لر.", "rollback": "اوولکی نوسخه لر", "rollbacklink": "قایتار", - "rollbacklinkcount": "$1 دییشدیرمه‌نی قایتار", + "rollbacklinkcount": "{{PLURAL:$1|دییشدیرمه}}نی قایتار", "rollbacklinkcount-morethan": "$1-دن چوْخ دییشدیرمه‌نی قایتار", "rollbackfailed": "گئری قایتارما اوغورسوزدور", "cantrollback": "دییشدیر گئری قایتاریلا بیلمز؛ آخیرینجی دییشدیر صحیفه‌ده اولان یئگانه فالیت‌دیر.", @@ -2199,13 +2199,13 @@ "javascripttest": "جاوااسکریپت تِستی", "javascripttest-pagetext-unknownaction": "تانینمایان ایش «$1».", "javascripttest-qunit-intro": "mediawiki.org-دا [$1 تِست ائتمه سندلندیرمه‌لری]نه باخین.", - "tooltip-pt-userpage": "ایشلدن صفحه‌نیز", + "tooltip-pt-userpage": "ایشلدن صفحه‌{{GENDER:|نیز}}", "tooltip-pt-anonuserpage": "سیز او آی‌پی آدرسیله دَییشیکلیک ائتدیگینیز ایستیفاده‌چی صحیفه‌سی", - "tooltip-pt-mytalk": "دانیشیق صفحه‌نیز", + "tooltip-pt-mytalk": "{{GENDER:|سیزین}} دانیشیق صفحه‌نیز", "tooltip-pt-anontalk": "بو آی‌پی آدرسینین دَییشیکلیکلرینه گؤره دانیشیق", - "tooltip-pt-preferences": "ترجیحلرینیز", + "tooltip-pt-preferences": "{{GENDER:|سیزین}} ترجیحلرینیز", "tooltip-pt-watchlist": "دییشمکلرینی ایزله‌دیگینیز صفحه‌لرین سیاهی‌سی", - "tooltip-pt-mycontris": "سیزین چالیشمالارینیزین لیستی", + "tooltip-pt-mycontris": "{{GENDER:|سیزین}} چالیشمالارینیزین لیستی", "tooltip-pt-login": "گیریش ائتمه‌یینیز توصیه اولونور؛ اما گرکلی دئییل", "tooltip-pt-logout": "چیخیش", "tooltip-pt-createaccount": "سیزدن دعوت اولونور ایشلدن حسابی آچیب و گیریش ائده‌سیز؛ آنجاق حساب یاراتماق ایستگه باغلی‌دیر", @@ -2236,7 +2236,7 @@ "tooltip-t-recentchangeslinked": "بو صفحه‌دن باغلانان صفحه‌لرین سون دَییشیکلیک‌لری", "tooltip-feed-rss": "بو صحیفه‌‌ اوچون آراس‌اس يايیمی", "tooltip-feed-atom": "بو صحیفه‌‌ اوچون آتوم يايیمی", - "tooltip-t-contributions": "بو ایستیفاده‌چی‌نین وئردیگی دییشیکلر سیاهی‌سی", + "tooltip-t-contributions": "{{GENDER:$1|بۇ ایشلدنین}} وئردیگی دییشیکلر لیستی", "tooltip-t-emailuser": "بو ایستیفاده‌چی‌یه بیر ایمیل گؤندر", "tooltip-t-info": "بو صفحه‌یه گؤره آرتیق بیلگی", "tooltip-t-upload": "فایل‌لار یوکله", @@ -2442,8 +2442,8 @@ "exif-colorspace": "رنگ ساحه‌سی", "exif-componentsconfiguration": "هر بیلشنین معناسی", "exif-compressedbitsperpixel": "شکیل سیخیشدیرما فورماتی", - "exif-pixelydimension": "شکیلین انی", - "exif-pixelxdimension": "شکیلین اوزوناسی", + "exif-pixelxdimension": "شکیلین انی", + "exif-pixelydimension": "شکیلین اوزوناسی", "exif-usercomment": "استفادچی شرحی", "exif-relatedsoundfile": "حاقیندا سس لی فایل", "exif-datetimeoriginal": "اورژینال یاراتما زامانی", @@ -2882,7 +2882,6 @@ "redirect-not-exists": "دَگَر تاپیلمادی", "fileduplicatesearch": "دوبلیکات فايل آختاریشی", "fileduplicatesearch-summary": "تعمین ائتمک ديَری دؤشه‌مه‌سینده بنزر فايللاری آختار.", - "fileduplicatesearch-legend": "Dublikatı axtar", "fileduplicatesearch-filename": "فايل آدی:", "fileduplicatesearch-submit": "آختار", "fileduplicatesearch-info": "$1 × $2 پیکسِل
فایل اؤلچوسو: $3
MIME نوعو: $4", diff --git a/languages/i18n/ba.json b/languages/i18n/ba.json index b9ad9f6f85..bf422d6a34 100644 --- a/languages/i18n/ba.json +++ b/languages/i18n/ba.json @@ -2694,8 +2694,8 @@ "exif-colorspace": "Төҫтәр киңлеге", "exif-componentsconfiguration": "Төҫ өлөштәренең төҙөлөшө", "exif-compressedbitsperpixel": "Рәсемде ҡыҫыу ысулы", - "exif-pixelydimension": "Рәсем киңлеге", - "exif-pixelxdimension": "Рәсем бейеклеге", + "exif-pixelxdimension": "Рәсем киңлеге", + "exif-pixelydimension": "Рәсем бейеклеге", "exif-usercomment": "Ҡулланыусы иҫкәрмәһе", "exif-relatedsoundfile": "Бәйле аудио файл", "exif-datetimeoriginal": "Төп көнө һәм ваҡыты", @@ -3148,7 +3148,6 @@ "redirect-not-exists": "Мәғәнәһе табылманы", "fileduplicatesearch": "Бер иш файлдарҙы эҙләү", "fileduplicatesearch-summary": "Бер иш файлдарҙы хэш-кодтары буйынса эҙләү.", - "fileduplicatesearch-legend": "Бер иш файлдарҙы эҙләү", "fileduplicatesearch-filename": "Файл исеме:", "fileduplicatesearch-submit": "Эҙләү", "fileduplicatesearch-info": "$1 × $2 пиксел
Файлдың дәүмәле: $3
MIME төрө: $4", diff --git a/languages/i18n/bcc.json b/languages/i18n/bcc.json index 943b13f25f..57f578c334 100644 --- a/languages/i18n/bcc.json +++ b/languages/i18n/bcc.json @@ -2192,8 +2192,8 @@ "exif-colorspace": "فضا رنگ", "exif-componentsconfiguration": "معنی هر جز", "exif-compressedbitsperpixel": "مدل کمپرس کتن عکس", - "exif-pixelydimension": "معتبرین پهنات عکس", - "exif-pixelxdimension": "معتبرین ارتفاع عکس", + "exif-pixelxdimension": "معتبرین پهنات عکس", + "exif-pixelydimension": "معتبرین ارتفاع عکس", "exif-usercomment": "نظرات کاربر", "exif-relatedsoundfile": "مربوطین فایل صوتی", "exif-datetimeoriginal": "تاریح و وهد شرکتن دیتا", diff --git a/languages/i18n/bcl.json b/languages/i18n/bcl.json index 99c880f822..288898078a 100644 --- a/languages/i18n/bcl.json +++ b/languages/i18n/bcl.json @@ -2332,8 +2332,8 @@ "exif-colorspace": "Espasyong kulay", "exif-componentsconfiguration": "Panabot kan lambang komponente", "exif-compressedbitsperpixel": "Moda nin kompresyon sa imahe", - "exif-pixelydimension": "Lakbang kan imahe", - "exif-pixelxdimension": "Langkaw kan imahe", + "exif-pixelxdimension": "Lakbang kan imahe", + "exif-pixelydimension": "Langkaw kan imahe", "exif-usercomment": "Mga komento kan paragamít", "exif-relatedsoundfile": "Kaakibay kan sagunson na pandangog", "exif-datetimeoriginal": "Petsa asin oras kan henerasyon nin datos", diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json index 747176c258..a2fc059950 100644 --- a/languages/i18n/be-tarask.json +++ b/languages/i18n/be-tarask.json @@ -2670,8 +2670,8 @@ "exif-colorspace": "Колеравая прастора", "exif-componentsconfiguration": "Канфігурацыя колеравых кампанэнтаў", "exif-compressedbitsperpixel": "Глыбіня колеру пасьля сьцісканьня", - "exif-pixelydimension": "Шырыня выявы", - "exif-pixelxdimension": "Вышыня выявы", + "exif-pixelxdimension": "Шырыня выявы", + "exif-pixelydimension": "Вышыня выявы", "exif-usercomment": "Камэнтары карыстальніка", "exif-relatedsoundfile": "Датычны аўдыё-файл", "exif-datetimeoriginal": "Дата і час утварэньня зьвестак", @@ -3140,7 +3140,6 @@ "redirect-not-exists": "Значэньне ня знойдзена", "fileduplicatesearch": "Пошук дублікатаў файлаў", "fileduplicatesearch-summary": "Пошук аднолькавых файлаў на падставе іх хэшаў.", - "fileduplicatesearch-legend": "Пошук аднолькавых файлаў", "fileduplicatesearch-filename": "Назва файла:", "fileduplicatesearch-submit": "Шукаць", "fileduplicatesearch-info": "$1 × $2 піксэляў
Памер файла: $3
Тып MIME: $4", diff --git a/languages/i18n/be.json b/languages/i18n/be.json index 2fbe6cc7a8..3d478c1138 100644 --- a/languages/i18n/be.json +++ b/languages/i18n/be.json @@ -2655,8 +2655,8 @@ "exif-colorspace": "Каляровая прастора", "exif-componentsconfiguration": "Значэнні кампанентаў", "exif-compressedbitsperpixel": "Лад сціскання выявы", - "exif-pixelydimension": "Шырыня выявы", - "exif-pixelxdimension": "Вышыня выявы", + "exif-pixelxdimension": "Шырыня выявы", + "exif-pixelydimension": "Вышыня выявы", "exif-usercomment": "Заўвагі карыстальніка", "exif-relatedsoundfile": "Дачынены гукавы файл", "exif-datetimeoriginal": "Дата і час стварэння дадзеных", @@ -3111,7 +3111,6 @@ "redirect-not-exists": "Значэнне не знойдзена", "fileduplicatesearch": "Пошук дублікатных файлаў", "fileduplicatesearch-summary": "Пошук дублікатных файлах на падставе іх хэшаў.", - "fileduplicatesearch-legend": "Знайсці дублікаты", "fileduplicatesearch-filename": "Назва файла:", "fileduplicatesearch-submit": "Знайсці", "fileduplicatesearch-info": "$1 × $2 кропак
Аб'ём файла: $3
Тып MIME: $4", diff --git a/languages/i18n/bg.json b/languages/i18n/bg.json index bb8bf06eb9..c88f2fe1c5 100644 --- a/languages/i18n/bg.json +++ b/languages/i18n/bg.json @@ -472,6 +472,7 @@ "wrongpassword": "Въведената парола е невалидна. Опитайте отново.", "wrongpasswordempty": "Не е въведена парола. Опитайте отново.", "passwordtooshort": "Необходимо е паролата да съдържа поне {{PLURAL:$1|1 знак|$1 знака}}.", + "passwordtoolong": "Паролата не може да бъде по-дългa пт {{PLURAL:$1|1 символ|$1 символа}}.", "passwordtoopopular": "Често използвани пароли не могат да бъдат ползвани. Моля, изберете по-уникална парола.", "password-name-match": "Паролата ви трябва да се различава от потребителското ви име.", "password-login-forbidden": "Използването на това потребителско име и парола е забранено.", @@ -481,7 +482,7 @@ "noemail": "Няма записана електронна поща за потребителя „$1“.", "noemailcreate": "Необходимо е да въведете валиден адрес за е-поща", "passwordsent": "Нова парола беше изпратена на електронната поща на „$1“.\nСлед като я получите, влезте отново.", - "blocked-mailpassword": "Редактирането от вашия IP-адрес е забранено, затова не ви е позволено да използвате възможността за възстановяване на парола.", + "blocked-mailpassword": "Редактирането от Вашия IP-адрес е забранено, затова не Ви се позволява да използвате възможността за възстановяване на парола.", "eauthentsent": "Писмото за потвърждение е изпратено на посочения адрес. В него са описани действията, които трябва да се извършат, за да потвърдите, че този адрес за електронна поща действително е ваш.", "throttled-mailpassword": "Функцията за напомняне на паролата е използвана през {{PLURAL:$1|последния един час|последните $1 часа}}.\nЗа предотвратяване на злоупотреби е разрешено да се изпраща не повече от едно напомняне в рамките на {{PLURAL:$1|един час|$1 часа}}.", "mailerror": "Грешка при изпращане на писмо: $1", @@ -2434,8 +2435,8 @@ "exif-colorspace": "Цветово пространство", "exif-componentsconfiguration": "Значение на всеки компонент", "exif-compressedbitsperpixel": "Режим на компресия на образа", - "exif-pixelydimension": "Ширина на изображението", - "exif-pixelxdimension": "Височина на изображението", + "exif-pixelxdimension": "Ширина на изображението", + "exif-pixelydimension": "Височина на изображението", "exif-usercomment": "Допълнителни коментари", "exif-relatedsoundfile": "Свързан звуков файл", "exif-datetimeoriginal": "Дата и час на създаване", @@ -2840,7 +2841,6 @@ "redirect-not-exists": "Стойността не е намерена", "fileduplicatesearch": "Търсене на повтарящи се файлове", "fileduplicatesearch-summary": "Търсене на повтарящи се файлове на база хеш стойности.", - "fileduplicatesearch-legend": "Търсене на повтарящ се файл", "fileduplicatesearch-filename": "Име на файл:", "fileduplicatesearch-submit": "Търсене", "fileduplicatesearch-info": "$1 × $2 пиксела
Размер на файла: $3
MIME тип: $4", @@ -2957,6 +2957,7 @@ "htmlform-chosen-placeholder": "Избиране", "htmlform-cloner-create": "Добавяне на още", "htmlform-cloner-delete": "Премахване", + "htmlform-title-not-exists": "$1 не съществува.", "sqlite-has-fts": "$1 с поддръжка на пълнотекстово търсене", "sqlite-no-fts": "$1 без поддръжка на пълнотекстово търсене", "logentry-delete-delete": "$1 {{GENDER:$2|изтри}} страницата $3", @@ -3078,6 +3079,7 @@ "pagelang-language": "Език", "pagelang-use-default": "Използване на езика по подразбиране", "pagelang-select-lang": "Избиране на език", + "pagelang-submit": "Изпращане", "right-pagelang": "Промяна езика на страница", "action-pagelang": "промяна езика на страницата", "log-name-pagelang": "Дневник на езиковите промени", @@ -3118,5 +3120,13 @@ "mw-widgets-titleinput-description-new-page": "страницата все още не съществува", "mw-widgets-titleinput-description-redirect": "пренасочване към $1", "api-error-blacklisted": "Моля, изберете различно, описателно заглавие.", - "randomrootpage": "Случайна начална страница" + "randomrootpage": "Случайна начална страница", + "log-action-filter-protect": "Тип защита:", + "log-action-filter-upload": "Тип качване:", + "log-action-filter-all": "Всички", + "log-action-filter-block-block": "Блокиране", + "log-action-filter-block-reblock": "Промяна на блокирането", + "log-action-filter-block-unblock": "Отблокиране", + "log-action-filter-upload-upload": "Ново качване", + "log-action-filter-upload-overwrite": "Повторно качване" } diff --git a/languages/i18n/bgn.json b/languages/i18n/bgn.json index 924dc8eb3f..15bca16bca 100644 --- a/languages/i18n/bgn.json +++ b/languages/i18n/bgn.json @@ -2189,8 +2189,8 @@ "exif-colorspace": "رنگاني فضا", "exif-componentsconfiguration": "هریک شه مووله په ئانی مانا", "exif-compressedbitsperpixel": "اکس ئی پشرده ئی هالت", - "exif-pixelydimension": "اکسئ گۆر", - "exif-pixelxdimension": "اکسئ بُرزی", + "exif-pixelxdimension": "اکسئ گۆر", + "exif-pixelydimension": "اکسئ بُرزی", "exif-usercomment": "کار زوروکئ توضیحات", "exif-relatedsoundfile": "مربوتین توارین پایل", "exif-datetimeoriginal": "دیتائانی ودئ بوتین ئی تاریخ و وخت", diff --git a/languages/i18n/bjn.json b/languages/i18n/bjn.json index 9648250b6a..7af3b488e1 100644 --- a/languages/i18n/bjn.json +++ b/languages/i18n/bjn.json @@ -2093,8 +2093,8 @@ "exif-colorspace": "Kamar kalir", "exif-componentsconfiguration": "Arti matan tiap kumpunin", "exif-compressedbitsperpixel": "Muda kumprasi gambar", - "exif-pixelydimension": "Lingai gambar", - "exif-pixelxdimension": "Pancau gambar", + "exif-pixelxdimension": "Lingai gambar", + "exif-pixelydimension": "Pancau gambar", "exif-usercomment": "Kumintar pamuruk", "exif-relatedsoundfile": "Barkas suara bahubung", "exif-datetimeoriginal": "Tanggal wan wayah paulahan data", diff --git a/languages/i18n/bn.json b/languages/i18n/bn.json index 000e61b415..72c5c44e6c 100644 --- a/languages/i18n/bn.json +++ b/languages/i18n/bn.json @@ -150,7 +150,7 @@ "category-media-header": "\"$1\" বিষয়শ্রেণীতে অন্তর্ভুক্ত মিডিয়া ফাইলগুলি", "category-empty": "''এই বিষয়শ্রণীতে বর্তমানে কোন পাতা বা মিডিয়া ফাইল নেই।''", "hidden-categories": "{{PLURAL:$1|লুকায়িত বিষয়শ্রেণী|লুকায়িত বিষয়শ্রেণীসমূহ}}", - "hidden-category-category": "লুক্কায়িত বিষয়শ্রেণীসমূহ", + "hidden-category-category": "লুকায়িত বিষয়শ্রেণীসমূহ", "category-subcat-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবলমাত্র নিচের উপবিষয়শ্রেণীটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি উপবিষয়শ্রেণীর মধ্যে {{PLURAL:$1|টি উপবিষয়শ্রেণী|$1টি উপবিষয়শ্রেণী}} নিচে দেখানো হয়েছে।}}", "category-subcat-count-limited": "এই বিষয়শ্রেণীতে নিচের {{PLURAL:$1|টি উপবিষয়শ্রেণী|$1টি উপবিষয়শ্রেণী আছে}}।", "category-article-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবল নিচের পাতাটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি পাতার মধ্যে {{PLURAL:$1|টি পাতা|$1টি পাতা}} নিচে দেখানো হল।}}", @@ -2618,8 +2618,8 @@ "exif-colorspace": "রঙ জগৎ", "exif-componentsconfiguration": "প্রতিটি উপাদানের অর্থ", "exif-compressedbitsperpixel": "ছবি সংকোচন মোড", - "exif-pixelydimension": "চিত্রের প্রস্থ", - "exif-pixelxdimension": "চিত্রের উচ্চতা", + "exif-pixelxdimension": "চিত্রের প্রস্থ", + "exif-pixelydimension": "চিত্রের উচ্চতা", "exif-usercomment": "ব্যবহারকারীর মন্তব্য", "exif-relatedsoundfile": "সংশ্লিষ্ট অডিও ফাইল", "exif-datetimeoriginal": "উপাত্ত উৎপাদনের তারিখ ও সময়", @@ -3118,7 +3118,6 @@ "redirect-not-exists": "মান পাওয়া যায়নি", "fileduplicatesearch": "সদৃশ ফাইলের জন্য অনুসন্ধান", "fileduplicatesearch-summary": "হ্যাশ ভ্যালুর ওর ভিত্তি করে একই ছবিগুলো খুঁজুন।", - "fileduplicatesearch-legend": "অনুলিপির জন্য অনুসন্ধান", "fileduplicatesearch-filename": "ফাইলনাম:", "fileduplicatesearch-submit": "অনুসন্ধান", "fileduplicatesearch-info": "$1 × $2 পিক্সেল
ফাইলের আকার: $3
এমআইএমই প্রকার: $4", diff --git a/languages/i18n/br.json b/languages/i18n/br.json index c542737eb5..28203d38e5 100644 --- a/languages/i18n/br.json +++ b/languages/i18n/br.json @@ -2436,8 +2436,8 @@ "exif-colorspace": "Lec'h al livioù", "exif-componentsconfiguration": "Talvoudegezh pep parzh", "exif-compressedbitsperpixel": "Doare gwaskañ ar skeudenn", - "exif-pixelydimension": "Ledander ar skeudenn", - "exif-pixelxdimension": "Sav ar skeudenn", + "exif-pixelxdimension": "Ledander ar skeudenn", + "exif-pixelydimension": "Sav ar skeudenn", "exif-usercomment": "Evezhiadennoù", "exif-relatedsoundfile": "Restr son stag", "exif-datetimeoriginal": "Deiziad hag eur ar sevel roadoù", diff --git a/languages/i18n/bs.json b/languages/i18n/bs.json index 83d271ebbe..efc2387a9e 100644 --- a/languages/i18n/bs.json +++ b/languages/i18n/bs.json @@ -2583,8 +2583,8 @@ "exif-colorspace": "Prostor boje", "exif-componentsconfiguration": "Značenje svake komponente", "exif-compressedbitsperpixel": "Način kompresije slike", - "exif-pixelydimension": "Širina slike", - "exif-pixelxdimension": "Visina slike", + "exif-pixelxdimension": "Širina slike", + "exif-pixelydimension": "Visina slike", "exif-usercomment": "Korisnički komentari", "exif-relatedsoundfile": "Povezana zvučna datoteka", "exif-datetimeoriginal": "Datum i vrijeme generisanja podataka", diff --git a/languages/i18n/ca.json b/languages/i18n/ca.json index 33b619a6dc..74a95a3540 100644 --- a/languages/i18n/ca.json +++ b/languages/i18n/ca.json @@ -2715,8 +2715,8 @@ "exif-colorspace": "Espai de color", "exif-componentsconfiguration": "Significat de cada component", "exif-compressedbitsperpixel": "Mode de compressió d'imatge", - "exif-pixelydimension": "Amplada de la imatge", - "exif-pixelxdimension": "Alçada de la imatge", + "exif-pixelxdimension": "Amplada de la imatge", + "exif-pixelydimension": "Alçada de la imatge", "exif-usercomment": "Comentaris de l'usuari", "exif-relatedsoundfile": "Fitxer d'àudio relacionat", "exif-datetimeoriginal": "Dia i hora de generació de les dades", @@ -3172,7 +3172,6 @@ "redirect-not-exists": "No s'ha trobat el valor", "fileduplicatesearch": "Cerca fitxers duplicats", "fileduplicatesearch-summary": "Cerca fitxers duplicats d'acord amb el seu valor de resum.", - "fileduplicatesearch-legend": "Cerca duplicats", "fileduplicatesearch-filename": "Nom del fitxer:", "fileduplicatesearch-submit": "Cerca", "fileduplicatesearch-info": "$1 × $2 píxels
Mida del fitxer: $3
Tipus MIME: $4", @@ -3569,6 +3568,16 @@ "log-action-filter-patrol": "Tipus de patrullatge:", "log-action-filter-protect": "Tipus de protecció:", "log-action-filter-upload": "Tipus de càrrega:", + "log-action-filter-all": "Tota", + "log-action-filter-block-block": "Bloca", + "log-action-filter-block-reblock": "Bloca la modificació", + "log-action-filter-block-unblock": "Desbloca", + "log-action-filter-delete-delete": "Supressió de pàgines", + "log-action-filter-delete-restore": "Restauració de pàgines", + "log-action-filter-delete-event": "Registre de supressió", + "log-action-filter-delete-revision": "Supressió de revisions", + "log-action-filter-patrol-patrol": "Patrullatge manual", + "log-action-filter-patrol-autopatrol": "Patrullatge automàtic", "log-action-filter-protect-protect": "Protecció", "log-action-filter-protect-modify": "Modificació de la protecció", "log-action-filter-protect-unprotect": "Desprotecció", diff --git a/languages/i18n/ce.json b/languages/i18n/ce.json index 4a69007334..461462a8a4 100644 --- a/languages/i18n/ce.json +++ b/languages/i18n/ce.json @@ -2319,8 +2319,8 @@ "exif-colorspace": "Беснашан хьал", "exif-componentsconfiguration": "Бесара компонентин конфигураци", "exif-compressedbitsperpixel": "Бесан кIоргалла дацдина чул тӀехьа", - "exif-pixelydimension": "Суьртан шоралла", - "exif-pixelxdimension": "Суьртан локхалла", + "exif-pixelxdimension": "Суьртан шоралла", + "exif-pixelydimension": "Суьртан локхалла", "exif-usercomment": "Кхин тӀе къамел", "exif-relatedsoundfile": "Къамелан аьзнийн файл", "exif-datetimeoriginal": "Дуьххьарлера терахь а хан", diff --git a/languages/i18n/ckb.json b/languages/i18n/ckb.json index b5494365ae..2750f4b206 100644 --- a/languages/i18n/ckb.json +++ b/languages/i18n/ckb.json @@ -2164,8 +2164,8 @@ "exif-artist": "نووسەر", "exif-exifversion": "وەشانی exif", "exif-colorspace": "بۆشایی ره‌نگ", - "exif-pixelydimension": "پانی وێنە", - "exif-pixelxdimension": "بەرزی وێنە", + "exif-pixelxdimension": "پانی وێنە", + "exif-pixelydimension": "بەرزی وێنە", "exif-usercomment": "بۆچوونەکانی بەکارھێنەر", "exif-relatedsoundfile": "فایلی ده‌نگی لێکچوو", "exif-datetimeoriginal": "ڕێکەوت و کاتی بەرھەمھێنانی داتا", @@ -2477,7 +2477,6 @@ "redirect-file": "ناوی پەڕگە", "fileduplicatesearch": "گەڕان بۆ پەڕگە دووپات کراوەکان", "fileduplicatesearch-summary": "گەڕان بۆ پەڕگە دووبارەکراوەکان لەسەر بنەمای نرخی hash.", - "fileduplicatesearch-legend": "گەڕان بۆ دووبارەکردنێک", "fileduplicatesearch-filename": "ناوی پەرگە:", "fileduplicatesearch-submit": "گەڕان", "fileduplicatesearch-info": "$1 × $2 پیکسەل
قەبارەی پەڕگە: $3
MIME جۆری: $4", diff --git a/languages/i18n/cs.json b/languages/i18n/cs.json index 5ff68d3920..01c3cf9d6d 100644 --- a/languages/i18n/cs.json +++ b/languages/i18n/cs.json @@ -2719,8 +2719,8 @@ "exif-colorspace": "Barevný prostor", "exif-componentsconfiguration": "Význam jednotlivých složek", "exif-compressedbitsperpixel": "Komprimační režim", - "exif-pixelydimension": "Šířka obrázku", - "exif-pixelxdimension": "Výška obrázku", + "exif-pixelxdimension": "Šířka obrázku", + "exif-pixelydimension": "Výška obrázku", "exif-usercomment": "Uživatelské poznámky", "exif-relatedsoundfile": "Související zvukový soubor", "exif-datetimeoriginal": "Datum a čas pořízení obrázku", @@ -3230,7 +3230,6 @@ "redirect-not-exists": "Hodnota nenalezena", "fileduplicatesearch": "Hledání duplicitních souborů", "fileduplicatesearch-summary": "Hledání duplicitních souborů podle jejich hašů.", - "fileduplicatesearch-legend": "Hledání duplikátů", "fileduplicatesearch-filename": "Jméno souboru:", "fileduplicatesearch-submit": "Hledat", "fileduplicatesearch-info": "(rozměr: $1 × $2 pixelů, velikost souboru: $3, MIME typ: $4)", diff --git a/languages/i18n/cy.json b/languages/i18n/cy.json index 3ff54a8823..2e2ff9446a 100644 --- a/languages/i18n/cy.json +++ b/languages/i18n/cy.json @@ -2487,8 +2487,8 @@ "exif-colorspace": "Gofod lliw", "exif-componentsconfiguration": "Ystyr pob cydran", "exif-compressedbitsperpixel": "Modd cywasgu delwedd", - "exif-pixelydimension": "Lled y ddelwedd", - "exif-pixelxdimension": "Uchder y ddelwedd", + "exif-pixelxdimension": "Lled y ddelwedd", + "exif-pixelydimension": "Uchder y ddelwedd", "exif-usercomment": "Sylwadau'r defnyddiwr", "exif-relatedsoundfile": "Ffeil sain gysylltiedig", "exif-datetimeoriginal": "Dyddiad ac amser y cynhyrchwyd y data", diff --git a/languages/i18n/da.json b/languages/i18n/da.json index 068164e854..cde37100b2 100644 --- a/languages/i18n/da.json +++ b/languages/i18n/da.json @@ -2556,8 +2556,8 @@ "exif-colorspace": "Farverum", "exif-componentsconfiguration": "Betydning af enkelte komponenter", "exif-compressedbitsperpixel": "Komprimerede bits pr. pixel", - "exif-pixelydimension": "Billedbredde", - "exif-pixelxdimension": "Billedhøjde", + "exif-pixelxdimension": "Billedbredde", + "exif-pixelydimension": "Billedhøjde", "exif-usercomment": "Brugerkommentarer", "exif-relatedsoundfile": "Tilhørende lydfil", "exif-datetimeoriginal": "Optagelsestidspunkt", diff --git a/languages/i18n/de.json b/languages/i18n/de.json index 2b1453d82d..589022299a 100644 --- a/languages/i18n/de.json +++ b/languages/i18n/de.json @@ -2785,8 +2785,8 @@ "exif-colorspace": "Farbraum", "exif-componentsconfiguration": "Bedeutung einzelner Komponenten", "exif-compressedbitsperpixel": "Komprimierte Bits pro Pixel", - "exif-pixelydimension": "Bildbreite", - "exif-pixelxdimension": "Bildhöhe", + "exif-pixelxdimension": "Bildbreite", + "exif-pixelydimension": "Bildhöhe", "exif-usercomment": "Benutzerkommentare", "exif-relatedsoundfile": "Zugehörige Tondatei", "exif-datetimeoriginal": "Erfassungszeitpunkt", @@ -3265,7 +3265,6 @@ "redirect-not-exists": "Der Wert wurde nicht gefunden", "fileduplicatesearch": "Dateiduplikatsuche", "fileduplicatesearch-summary": "Suche nach Dateiduplikaten auf Basis ihres Hashwertes.", - "fileduplicatesearch-legend": "Suche nach Duplikaten", "fileduplicatesearch-filename": "Dateiname:", "fileduplicatesearch-submit": "Suchen", "fileduplicatesearch-info": "$1 × $2 Pixel
Dateigröße: $3
MIME-Typ: $4", diff --git a/languages/i18n/diq.json b/languages/i18n/diq.json index 059ce8b893..3e05bd4676 100644 --- a/languages/i18n/diq.json +++ b/languages/i18n/diq.json @@ -2470,8 +2470,8 @@ "exif-colorspace": "Cayê rengi", "exif-componentsconfiguration": "manayê qisimê hemi", "exif-compressedbitsperpixel": "Modê komprasyonê resimi", - "exif-pixelydimension": "Herayeya resimi", - "exif-pixelxdimension": "Berzeya resimi", + "exif-pixelxdimension": "Herayeya resimi", + "exif-pixelydimension": "Berzeya resimi", "exif-usercomment": "Mışewreyê karberi", "exif-relatedsoundfile": "Derhekê dosya yê vengi", "exif-datetimeoriginal": "Zeman u tarixê data varaziyayişi", diff --git a/languages/i18n/dsb.json b/languages/i18n/dsb.json index 0817b873d8..b0f2852e18 100644 --- a/languages/i18n/dsb.json +++ b/languages/i18n/dsb.json @@ -2381,8 +2381,8 @@ "exif-colorspace": "Barwowy rum", "exif-componentsconfiguration": "Wóznam jadnotliwych komponentow", "exif-compressedbitsperpixel": "Kompriměrowane bity na piksel", - "exif-pixelydimension": "Šyrokosć wobraza", - "exif-pixelxdimension": "Wusokosć wobraza", + "exif-pixelxdimension": "Šyrokosć wobraza", + "exif-pixelydimension": "Wusokosć wobraza", "exif-usercomment": "Komentary wužywarja", "exif-relatedsoundfile": "Pśisłušna zukowa dataja", "exif-datetimeoriginal": "Datum a cas wutwórjenja datow", diff --git a/languages/i18n/el.json b/languages/i18n/el.json index 0141f08b22..400cd91f90 100644 --- a/languages/i18n/el.json +++ b/languages/i18n/el.json @@ -2687,8 +2687,8 @@ "exif-colorspace": "Χρωματική περιοχή", "exif-componentsconfiguration": "Νόημα του κάθε στοιχείου", "exif-compressedbitsperpixel": "Κατάσταση συμπίεσης εικόνας", - "exif-pixelydimension": "Πλάτος εικόνας", - "exif-pixelxdimension": "Ύψος εικόνας", + "exif-pixelxdimension": "Πλάτος εικόνας", + "exif-pixelydimension": "Ύψος εικόνας", "exif-usercomment": "Σχόλια χρήστη", "exif-relatedsoundfile": "Σχετικό αρχείο ήχου", "exif-datetimeoriginal": "Ημερομηνία και ώρα της παραγωγής ψηφιακών δεδομένων", diff --git a/languages/i18n/en.json b/languages/i18n/en.json index 6489ca33f4..48e6cd0a0a 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -2973,8 +2973,8 @@ "exif-colorspace": "Color space", "exif-componentsconfiguration": "Meaning of each component", "exif-compressedbitsperpixel": "Image compression mode", - "exif-pixelydimension": "Image width", - "exif-pixelxdimension": "Image height", + "exif-pixelxdimension": "Image width", + "exif-pixelydimension": "Image height", "exif-usercomment": "User comments", "exif-relatedsoundfile": "Related audio file", "exif-datetimeoriginal": "Date and time of data generation", @@ -3340,6 +3340,10 @@ "confirmemail_body_set": "Someone, probably you, from IP address $1,\nhas set the email address of the account \"$2\" to this address on {{SITENAME}}.\n\nTo confirm that this account really does belong to you and activate\nemail features on {{SITENAME}}, open this link in your browser:\n\n$3\n\nIf the account does *not* belong to you, follow this link\nto cancel the email address confirmation:\n\n$5\n\nThis confirmation code will expire at $4.", "confirmemail_invalidated": "Email address confirmation canceled", "invalidateemail": "Cancel email confirmation", + "notificationemail_subject_changed": "{{SITENAME}} registered email address has been changed", + "notificationemail_subject_removed": "{{SITENAME}} registered email address has been removed", + "notificationemail_body_changed": "Someone, probably you, from IP address $1,\nhas changed the email address of the account \"$2\" to \"$3\" on {{SITENAME}}.\n\nIf this was not you, contact a site administrator immediately.", + "notificationemail_body_removed": "Someone, probably you, from IP address $1,\nhas removed the email address of the account \"$2\" on {{SITENAME}}.\n\nIf this was not you, contact a site administrator immediately.", "scarytranscludedisabled": "[Interwiki transcluding is disabled]", "scarytranscludefailed": "[Template fetch failed for $1]", "scarytranscludefailed-httpstatus": "[Template fetch failed for $1: HTTP $2]", diff --git a/languages/i18n/eo.json b/languages/i18n/eo.json index 2a819eab34..ae00baa8a7 100644 --- a/languages/i18n/eo.json +++ b/languages/i18n/eo.json @@ -2599,8 +2599,8 @@ "exif-colorspace": "Kolor-spaco", "exif-componentsconfiguration": "Signifo de ĉiu kompono", "exif-compressedbitsperpixel": "Reĝimo de bilda densigado", - "exif-pixelydimension": "Larĝeco de bildo", - "exif-pixelxdimension": "Alteco de bildo", + "exif-pixelxdimension": "Larĝeco de bildo", + "exif-pixelydimension": "Alteco de bildo", "exif-usercomment": "Komentoj de uzanto", "exif-relatedsoundfile": "Rilata son-dosiero", "exif-datetimeoriginal": "Dato kaj tempo de datuma generado", @@ -3104,7 +3104,6 @@ "redirect-not-exists": "Valoro ne trovita", "fileduplicatesearch": "Serĉu duplikatajn dosierojn", "fileduplicatesearch-summary": "Serĉi duplikatajn dosierojn bazite de haketvaloro.", - "fileduplicatesearch-legend": "Serĉi duplikaton", "fileduplicatesearch-filename": "Dosiernomo:", "fileduplicatesearch-submit": "Serĉi", "fileduplicatesearch-info": "$1 × $2 rastrumero
Dosiera pezo: $3
MIME-tipo: $4", diff --git a/languages/i18n/es.json b/languages/i18n/es.json index 4c215cc372..f9eaa4c089 100644 --- a/languages/i18n/es.json +++ b/languages/i18n/es.json @@ -2834,8 +2834,8 @@ "exif-colorspace": "Espacio de color", "exif-componentsconfiguration": "Significado de cada componente", "exif-compressedbitsperpixel": "Modo de compresión de la imagen", - "exif-pixelydimension": "Ancho de la imagen", - "exif-pixelxdimension": "Altura de la imagen", + "exif-pixelxdimension": "Ancho de la imagen", + "exif-pixelydimension": "Altura de la imagen", "exif-usercomment": "Comentarios de usuario", "exif-relatedsoundfile": "Archivo de audio relacionado", "exif-datetimeoriginal": "Fecha y hora de la generación de los datos", @@ -3294,7 +3294,6 @@ "redirect-not-exists": "No se encontró el valor", "fileduplicatesearch": "Búsqueda de archivos duplicados", "fileduplicatesearch-summary": "Búsqueda de archivos duplicados en base a su valor hash.", - "fileduplicatesearch-legend": "Busca duplicados", "fileduplicatesearch-filename": "Nombre de archivo:", "fileduplicatesearch-submit": "Buscar", "fileduplicatesearch-info": "$1 × $2 píxeles
Tamaño: $3
Tipo MIME: $4", diff --git a/languages/i18n/et.json b/languages/i18n/et.json index ad1541853d..9b7ab63386 100644 --- a/languages/i18n/et.json +++ b/languages/i18n/et.json @@ -2631,8 +2631,8 @@ "exif-colorspace": "Värviruum", "exif-componentsconfiguration": "Iga komponendi tähendus", "exif-compressedbitsperpixel": "Pildi pakkimise meetod", - "exif-pixelydimension": "Pildi laius", - "exif-pixelxdimension": "Pildi kõrgus", + "exif-pixelxdimension": "Pildi laius", + "exif-pixelydimension": "Pildi kõrgus", "exif-usercomment": "Kasutaja kommentaarid", "exif-relatedsoundfile": "Seotud helifail", "exif-datetimeoriginal": "Andmete loomise kuupäev ja kellaaeg", diff --git a/languages/i18n/eu.json b/languages/i18n/eu.json index 7898f48279..09c8349fdd 100644 --- a/languages/i18n/eu.json +++ b/languages/i18n/eu.json @@ -2419,8 +2419,8 @@ "exif-colorspace": "Kolore tartea", "exif-componentsconfiguration": "Osagai bakoitzaren esanahia", "exif-compressedbitsperpixel": "Irudi konpresio mota", - "exif-pixelydimension": "Irudiaren zabalera", - "exif-pixelxdimension": "Irudiaren altuera", + "exif-pixelxdimension": "Irudiaren zabalera", + "exif-pixelydimension": "Irudiaren altuera", "exif-usercomment": "Erabiltzailearen iruzkinak", "exif-relatedsoundfile": "Harremanetan dagoen audio fitxategia", "exif-datetimeoriginal": "Datuen sorreraren data eta ordua", @@ -2880,7 +2880,6 @@ "redirect-not-exists": "Ez da baliorik aurkitu", "fileduplicatesearch": "Artxibo bikoiztuen bilaketa", "fileduplicatesearch-summary": "Bikoiztutako fitxategiak bilatu bere hash balioaren arabera.", - "fileduplicatesearch-legend": "Duplikatu bat bilatu", "fileduplicatesearch-filename": "Fitxategi izena:", "fileduplicatesearch-submit": "Bilaketa", "fileduplicatesearch-info": "$1 × $2 pixel
Fitxategiaren tamaina: $3
MIME mota: $4", diff --git a/languages/i18n/ext.json b/languages/i18n/ext.json index ba573084a4..ea5fb44b82 100644 --- a/languages/i18n/ext.json +++ b/languages/i18n/ext.json @@ -1463,8 +1463,8 @@ "exif-colorspace": "Espaciu e colol", "exif-componentsconfiguration": "Senificau e ca componenti", "exif-compressedbitsperpixel": "Mó de compresión la imahin", - "exif-pixelydimension": "Anchón la imahin premitiu", - "exif-pixelxdimension": "Artu la imahin premitiu", + "exif-pixelxdimension": "Anchón la imahin premitiu", + "exif-pixelydimension": "Artu la imahin premitiu", "exif-usercomment": "Comentárius del usuáriu", "exif-relatedsoundfile": "Archivu d'audiu relacionau", "exif-datetimeoriginal": "Fecha i ora la heneración los datus", diff --git a/languages/i18n/fa.json b/languages/i18n/fa.json index ae34257aa8..1a4c120da8 100644 --- a/languages/i18n/fa.json +++ b/languages/i18n/fa.json @@ -2738,8 +2738,8 @@ "exif-colorspace": "فضای رنگی", "exif-componentsconfiguration": "معنی هر یک از مؤلفه‌ها", "exif-compressedbitsperpixel": "حالت فشرده‌سازی تصویر", - "exif-pixelydimension": "پهنای تصویر", - "exif-pixelxdimension": "بلندی تصویر", + "exif-pixelxdimension": "پهنای تصویر", + "exif-pixelydimension": "بلندی تصویر", "exif-usercomment": "توضیحات کاربر", "exif-relatedsoundfile": "پروندهٔ صوتی مربوط", "exif-datetimeoriginal": "تاریخ و زمان تولید داده‌ها", @@ -3256,7 +3256,6 @@ "redirect-not-exists": "مقدار پیدا نشد", "fileduplicatesearch": "جستجو برای پرونده‌های تکراری", "fileduplicatesearch-summary": "جستجو برای پرونده‌های تکراری بر اساس مقدار درهم‌شدهٔ آن‌ها صورت می‌گیرد.", - "fileduplicatesearch-legend": "جستجوی موارد تکراری", "fileduplicatesearch-filename": "نام پرونده:", "fileduplicatesearch-submit": "جستجو", "fileduplicatesearch-info": "$1 × $2 پیکسل
اندازهٔ پرونده: $3
نوع MIME: $4", diff --git a/languages/i18n/fi.json b/languages/i18n/fi.json index 1782a7f9f1..a5d794e977 100644 --- a/languages/i18n/fi.json +++ b/languages/i18n/fi.json @@ -2701,8 +2701,8 @@ "exif-colorspace": "Väriavaruus", "exif-componentsconfiguration": "Kunkin komponentin määritelmä", "exif-compressedbitsperpixel": "Kuvan pakkaustapa", - "exif-pixelydimension": "Kuvan leveys", - "exif-pixelxdimension": "Kuvan korkeus", + "exif-pixelxdimension": "Kuvan leveys", + "exif-pixelydimension": "Kuvan korkeus", "exif-usercomment": "Käyttäjän kommentit", "exif-relatedsoundfile": "Liitetty äänitiedosto", "exif-datetimeoriginal": "Luontipäivämäärä", @@ -3175,7 +3175,6 @@ "redirect-not-exists": "Arvoa ei löytynyt", "fileduplicatesearch": "Kaksoiskappaleiden haku", "fileduplicatesearch-summary": "Etsii tiedoston kaksoiskappaleita hajautusarvon perusteella.", - "fileduplicatesearch-legend": "Etsi kaksoiskappaleita", "fileduplicatesearch-filename": "Tiedostonimi", "fileduplicatesearch-submit": "Etsi", "fileduplicatesearch-info": "$1 × $2 kuvapistettä
Tiedostokoko: $3
MIME-tyyppi: $4", diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json index ffa35ca733..3ac44b1d5c 100644 --- a/languages/i18n/fr.json +++ b/languages/i18n/fr.json @@ -1442,7 +1442,7 @@ "recentchanges-page-added-to-category": "[[:$1]] ajouté à la catégorie", "recentchanges-page-added-to-category-bundled": "[[:$1]] et [[Special:WhatLinksHere/$1|{{PLURAL:$2|une page ajoutée|$2 pages ajoutées}}]] à la catégorie", "recentchanges-page-removed-from-category": "[[:$1]] supprimé de la catégorie", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] et [[Special:WhatLinksHere/$1|{{PLURAL:$2|une page|$2 pages}}]] {{PLURAL:$2|retirée|retirées}} de la catégorie", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] et [[Special:WhatLinksHere/$1|{{PLURAL:$2|une page retirée|$2 pages retirées}}]] de la catégorie", "autochange-username": "Modification automatique de MediaWiki", "upload": "Importer un fichier", "uploadbtn": "Importer le fichier", @@ -2849,8 +2849,8 @@ "exif-colorspace": "Espace colorimétrique", "exif-componentsconfiguration": "Signification de chaque composante", "exif-compressedbitsperpixel": "Mode de compression de l'image", - "exif-pixelydimension": "Largeur de l'image", - "exif-pixelxdimension": "Hauteur de l'image", + "exif-pixelxdimension": "Largeur de l'image", + "exif-pixelydimension": "Hauteur de l'image", "exif-usercomment": "Commentaires de l'utilisateur", "exif-relatedsoundfile": "Fichier audio associé", "exif-datetimeoriginal": "Date de la prise originelle", @@ -3383,7 +3383,6 @@ "redirect-not-exists": "Valeur non trouvée", "fileduplicatesearch": "Recherche de doublons", "fileduplicatesearch-summary": "Recherche des copies de fichiers identiques d'après leur empreinte de hachage.", - "fileduplicatesearch-legend": "Rechercher un doublon", "fileduplicatesearch-filename": "Nom du fichier :", "fileduplicatesearch-submit": "Rechercher", "fileduplicatesearch-info": "$1 × $2 pixels
Taille du fichier : $3
Type MIME : $4", @@ -3801,20 +3800,20 @@ "log-action-filter-delete": "Type de suppression :", "log-action-filter-patrol": "Type de patrouille :", "log-action-filter-protect": "Type de protection :", - "log-action-filter-upload": "Type de téléchargement:", + "log-action-filter-upload": "Type de téléversement :", "log-action-filter-all": "Tout", - "log-action-filter-block-block": "Bloc", - "log-action-filter-block-reblock": "Modification de bloc", + "log-action-filter-block-block": "Blocage", + "log-action-filter-block-reblock": "Modification de blocage", "log-action-filter-block-unblock": "Débloquer", "log-action-filter-delete-delete": "Suppression de pages", "log-action-filter-delete-restore": "Restauration de page", "log-action-filter-delete-event": "Suppression du journal", - "log-action-filter-delete-revision": "Supression de révison", + "log-action-filter-delete-revision": "Suppression de révison", "log-action-filter-patrol-patrol": "Patrouille manuelle", "log-action-filter-patrol-autopatrol": "Patrouille automatique", "log-action-filter-protect-protect": "Protection", "log-action-filter-protect-modify": "Modification de la protection", "log-action-filter-protect-unprotect": "Levée de la protection", "log-action-filter-upload-upload": "Nouveau téléversement", - "log-action-filter-upload-overwrite": "Reitérer le téléversement" + "log-action-filter-upload-overwrite": "Réitérer le téléversement" } diff --git a/languages/i18n/frp.json b/languages/i18n/frp.json index 62088d2d08..7e9235dea9 100644 --- a/languages/i18n/frp.json +++ b/languages/i18n/frp.json @@ -2698,8 +2698,8 @@ "exif-colorspace": "Èspâço colorimètrico", "exif-componentsconfiguration": "Significacion de châque composenta", "exif-compressedbitsperpixel": "Fôrma de comprèssion de l’émâge", - "exif-pixelydimension": "Largior de l’émâge", - "exif-pixelxdimension": "Hôtior de l’émâge", + "exif-pixelxdimension": "Largior de l’émâge", + "exif-pixelydimension": "Hôtior de l’émâge", "exif-usercomment": "Comentèros de l’utilisator", "exif-relatedsoundfile": "Fichiér ôdiô associyê", "exif-datetimeoriginal": "Dâta et hora de la prêsa originâla", diff --git a/languages/i18n/frr.json b/languages/i18n/frr.json index e5b41717b7..d95029ffe5 100644 --- a/languages/i18n/frr.json +++ b/languages/i18n/frr.json @@ -2536,8 +2536,8 @@ "exif-colorspace": "Klöörenrüm", "exif-componentsconfiguration": "Enkelt komponenten", "exif-compressedbitsperpixel": "Komprimiaret bits per pixel", - "exif-pixelydimension": "Bilbreetje", - "exif-pixelxdimension": "Bilhööchde", + "exif-pixelxdimension": "Bilbreetje", + "exif-pixelydimension": "Bilhööchde", "exif-usercomment": "Brüker komentaaren", "exif-relatedsoundfile": "Ferbünjen tuundatei", "exif-datetimeoriginal": "Dootem an klooktidj faan't knipsin", diff --git a/languages/i18n/fy.json b/languages/i18n/fy.json index 36a21705c9..f7154dab2c 100644 --- a/languages/i18n/fy.json +++ b/languages/i18n/fy.json @@ -1740,8 +1740,8 @@ "exif-exifversion": "Exif-ferzje", "exif-colorspace": "Kleurromte", "exif-compressedbitsperpixel": "Ofbylding kompresjemetoade", - "exif-pixelydimension": "Ofbyldingsbreedte", - "exif-pixelxdimension": "Ofbyldingshichte", + "exif-pixelxdimension": "Ofbyldingsbreedte", + "exif-pixelydimension": "Ofbyldingshichte", "exif-usercomment": "Opmerkings", "exif-relatedsoundfile": "Besibbe audiotriem", "exif-datetimeoriginal": "Tiidstip gegevensoanmaak", @@ -1932,7 +1932,6 @@ "redirect-file": "Triemnamme", "redirect-not-exists": "Wearde net fûn", "fileduplicatesearch": "Sykje op duplikaten", - "fileduplicatesearch-legend": "Sykje op duplikaten", "fileduplicatesearch-filename": "Triemnamme:", "fileduplicatesearch-submit": "Sykje", "fileduplicatesearch-info": "$1 × $2 pixel
Triemgrutte: $3
MIME-type: $4", diff --git a/languages/i18n/ga.json b/languages/i18n/ga.json index 170d19e1b7..06cbd5c5b7 100644 --- a/languages/i18n/ga.json +++ b/languages/i18n/ga.json @@ -1311,8 +1311,8 @@ "exif-colorspace": "Dathspás", "exif-componentsconfiguration": "Ciall le gach giota", "exif-compressedbitsperpixel": "Modh chomhbhrú na n-íomhánna", - "exif-pixelydimension": "Leithead bailí don íomhá", - "exif-pixelxdimension": "Airde bailí don íomhá", + "exif-pixelxdimension": "Leithead bailí don íomhá", + "exif-pixelydimension": "Airde bailí don íomhá", "exif-usercomment": "Nótaí an úsáideora", "exif-relatedsoundfile": "comhad gaolmhara fuaime", "exif-datetimeoriginal": "Dáta agus am ghiniúint na sonraí", diff --git a/languages/i18n/gan-hans.json b/languages/i18n/gan-hans.json index 10a15b7598..1b46daa72e 100644 --- a/languages/i18n/gan-hans.json +++ b/languages/i18n/gan-hans.json @@ -1388,8 +1388,8 @@ "exif-colorspace": "颜色空间", "exif-componentsconfiguration": "每部分𠮶意思", "exif-compressedbitsperpixel": "图像压缩模式", - "exif-pixelydimension": "有效图像𠮶阔", - "exif-pixelxdimension": "有效图像𠮶高", + "exif-pixelxdimension": "有效图像𠮶阔", + "exif-pixelydimension": "有效图像𠮶高", "exif-usercomment": "用户摘要", "exif-relatedsoundfile": "相关𠮶声气资料", "exif-datetimeoriginal": "资料创作时间", diff --git a/languages/i18n/gan-hant.json b/languages/i18n/gan-hant.json index 3894997a12..01edb80ece 100644 --- a/languages/i18n/gan-hant.json +++ b/languages/i18n/gan-hant.json @@ -1384,8 +1384,8 @@ "exif-colorspace": "顏色空間", "exif-componentsconfiguration": "每部分嗰意思", "exif-compressedbitsperpixel": "圖像壓縮模式", - "exif-pixelydimension": "有效圖像嗰闊", - "exif-pixelxdimension": "有效圖像嗰高", + "exif-pixelxdimension": "有效圖像嗰闊", + "exif-pixelydimension": "有效圖像嗰高", "exif-usercomment": "用戶摘要", "exif-relatedsoundfile": "相關嗰聲氣資料", "exif-datetimeoriginal": "資料創作時間", diff --git a/languages/i18n/gd.json b/languages/i18n/gd.json index 1bb1745180..005e01cbe9 100644 --- a/languages/i18n/gd.json +++ b/languages/i18n/gd.json @@ -2469,8 +2469,8 @@ "exif-colorspace": "Spàs datha", "exif-componentsconfiguration": "Ciall aig gach co-phàirt", "exif-compressedbitsperpixel": "Modh dùmhlachd-bhreacaidh an deilbh", - "exif-pixelydimension": "Leud an deilbh", - "exif-pixelxdimension": "Àirde an deilbh", + "exif-pixelxdimension": "Leud an deilbh", + "exif-pixelydimension": "Àirde an deilbh", "exif-usercomment": "Beachdan nan cleachdaichean", "exif-relatedsoundfile": "Faidhle fuaime co-cheangailte ris", "exif-datetimeoriginal": "Ceann-là 's àm a chaidh an dàta a chruthachadh", diff --git a/languages/i18n/gl.json b/languages/i18n/gl.json index 15e0175948..84dd8e742f 100644 --- a/languages/i18n/gl.json +++ b/languages/i18n/gl.json @@ -2712,8 +2712,8 @@ "exif-colorspace": "Espazo de cor", "exif-componentsconfiguration": "Significado de cada compoñente", "exif-compressedbitsperpixel": "Modo de compresión da imaxe", - "exif-pixelydimension": "Ancho da imaxe", - "exif-pixelxdimension": "Altura da imaxe", + "exif-pixelxdimension": "Ancho da imaxe", + "exif-pixelydimension": "Altura da imaxe", "exif-usercomment": "Comentarios do usuario", "exif-relatedsoundfile": "Ficheiro de son relacionado", "exif-datetimeoriginal": "Data e hora de xeración do ficheiro", @@ -3171,7 +3171,6 @@ "redirect-not-exists": "Non se atopou o valor", "fileduplicatesearch": "Procurar ficheiros duplicados", "fileduplicatesearch-summary": "Procurar ficheiros duplicados a partir do valor de hash (un mecanismo de comprobación).", - "fileduplicatesearch-legend": "Procurar un duplicado", "fileduplicatesearch-filename": "Nome do ficheiro:", "fileduplicatesearch-submit": "Procurar", "fileduplicatesearch-info": "$1 × $2 píxeles
Tamaño do ficheiro: $3
Tipo MIME: $4", diff --git a/languages/i18n/grc.json b/languages/i18n/grc.json index d3b1f9488e..c8b9e13ea7 100644 --- a/languages/i18n/grc.json +++ b/languages/i18n/grc.json @@ -1717,8 +1717,8 @@ "exif-colorspace": "Χρωματικὸς χῶρος", "exif-componentsconfiguration": "Νόημα ἑκάστης συνιστώσης", "exif-compressedbitsperpixel": "Τρόπος συμπιέσεως εἰκόνος", - "exif-pixelydimension": "Πλάτος εἰκόνος", - "exif-pixelxdimension": "Ὕψος εἰκόνος", + "exif-pixelxdimension": "Πλάτος εἰκόνος", + "exif-pixelydimension": "Ὕψος εἰκόνος", "exif-usercomment": "Σχόλια χρωμένου", "exif-relatedsoundfile": "Σχετιζόμενον ἀρχεῖον ἤχου", "exif-datetimeoriginal": "Χρονολογία καὶ ὥρα παραγωγῆς δεδομένων", diff --git a/languages/i18n/gsw.json b/languages/i18n/gsw.json index 6a82cac1af..756515572e 100644 --- a/languages/i18n/gsw.json +++ b/languages/i18n/gsw.json @@ -2549,8 +2549,8 @@ "exif-colorspace": "Farbruum", "exif-componentsconfiguration": "Bedytig vu einzelne Komponente", "exif-compressedbitsperpixel": "Komprimierti Bit pro Pixel", - "exif-pixelydimension": "Bildbreiti", - "exif-pixelxdimension": "Bildhechi", + "exif-pixelxdimension": "Bildbreiti", + "exif-pixelydimension": "Bildhechi", "exif-usercomment": "Benutzerkommentar", "exif-relatedsoundfile": "Zuegherigi Tondatei", "exif-datetimeoriginal": "Erfassigszytpunkt", diff --git a/languages/i18n/gu.json b/languages/i18n/gu.json index 804c4f9c14..05778ce590 100644 --- a/languages/i18n/gu.json +++ b/languages/i18n/gu.json @@ -2320,8 +2320,8 @@ "exif-colorspace": "રંગ માટે જગ્યા", "exif-componentsconfiguration": "દરેક ભાગનો અર્થ", "exif-compressedbitsperpixel": "ચિત્ર સરખામણી મોડ", - "exif-pixelydimension": "ચિત્ર પહોળાઇ", - "exif-pixelxdimension": "ચિત્રની ઊઁચાઈ", + "exif-pixelxdimension": "ચિત્ર પહોળાઇ", + "exif-pixelydimension": "ચિત્રની ઊઁચાઈ", "exif-usercomment": "સભ્યની ટિપ્પણી", "exif-relatedsoundfile": "સંબંધિત શ્રાવ્ય ફાઈલો", "exif-datetimeoriginal": "નિર્મિતીનો સમય અને તારીખ", diff --git a/languages/i18n/he.json b/languages/i18n/he.json index 60bbaabac6..01b7d0a3a8 100644 --- a/languages/i18n/he.json +++ b/languages/i18n/he.json @@ -382,7 +382,7 @@ "actionthrottled": "הפעולה הוגבלה", "actionthrottledtext": "כאמצעי נגד שימוש לרעה, קיימת מגבלה על ביצוע פעולה זו פעמים רבות מדי בזמן קצר, וחרגת מהמגבלה הזאת.\nנא לנסות שוב בעוד מספר דקות.", "protectedpagetext": "דף זה מוגן כדי למנוע עריכה ופעולות אחרות.", - "viewsourcetext": "באפשרותך לצפות בטקסט המקור של הדף ולהעתיקו.", + "viewsourcetext": "באפשרותכם לצפות בטקסט המקור של הדף ולהעתיקו.", "viewyourtext": "באפשרותך לצפות בטקסט המקור של העריכות שלך בדף הזה ולהעתיקו.", "protectedinterface": "דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה באתר ויקי זה, ומוגן כדי למנוע השחתות.\nכדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.", "editinginterface": "אזהרה: הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.\nשינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.", @@ -406,7 +406,7 @@ "virus-badscanner": "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''", "virus-scanfailed": "הסריקה נכשלה (קוד: $1)", "virus-unknownscanner": "אנטי־וירוס בלתי ידוע:", - "logouttext": "'''יצאתם זה עתה מהחשבון.'''\n\nשימו לב כי ייתכן שדפים אחדים ימשיכו להיות מוצגים כאילו אתם עדיין מחוברים לחשבון עד שתנקו את המטמון של הדפדפן שלכם.", + "logouttext": "יצאתם זה עתה מהחשבון.\n\nשימו לב כי ייתכן שדפים אחדים ימשיכו להיות מוצגים כאילו אתם עדיין מחוברים לחשבון עד שתנקו את המטמון של הדפדפן שלכם.", "cannotlogoutnow-title": "לא ניתן לצאת מהחשבון עכשיו", "cannotlogoutnow-text": "היציאה אינה אפשרית בעת שימוש ב{{GRAMMAR:תחילית|$1}}.", "welcomeuser": "ברוך בואך, $1!", @@ -666,14 +666,14 @@ "noarticletext": "אין כרגע טקסט בדף הזה.\nבאפשרותכם [[Special:Search/{{PAGENAME}}|לחפש את כותרת הדף]] בדפים אחרים,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} לחפש את הדף ביומנים],\nאו [{{fullurl:{{FULLPAGENAME}}|action=edit}} ליצור את הדף].", "noarticletext-nopermission": "אין כרגע טקסט בדף הזה.\nבאפשרותכם [[Special:Search/{{PAGENAME}}|לחפש את כותרת הדף]] בדפים אחרים,\nאו [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} לחפש את הדף ביומנים],\nאך אינכם מורשים ליצור את הדף.", "missing-revision": "גרסה #$1 של הדף \"{{FULLPAGENAME}}\" אינה קיימת.\n\nזה נגרם בדרך כלל על־ידי לחיצה על קישור ישן לגרסה קודמת של דף שנמחק.\nאפשר למצוא פרטים ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].", - "userpage-userdoesnotexist": "חשבון המשתמש \"$1\" אינו רשום.\nאנא בדקו אם ברצונכם ליצור/לערוך דף זה.", + "userpage-userdoesnotexist": "חשבון המשתמש \"$1\" אינו רשום.\nאנא בִּדקו אם ברצונכם ליצור/לערוך את הדף הזה.", "userpage-userdoesnotexist-view": "חשבון המשתמש \"$1\" אינו רשום.", "blocked-notice-logextract": "{{GENDER:$1|המשתמש הזה חסום|המשתמשת הזו חסומה}} כרגע.\nהפעולה האחרונה ביומן החסימות מוצגת להלן:", "clearyourcache": "הערה: לאחר השמירה, ייתכן שתצטרכו לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.\n* פיירפוקס / ספארי: לחצו והחזיקו את המקש Shift בעת לחיצתכם על טעינה מחדש (Reload), או לחצו על צירוף המקשים Ctrl-F5 או Ctrl-R‏ (⌘-R במחשב מק)\n* גוגל כרום: לחצו על צירוף המקשים Ctrl-Shift-R‏ (⌘-Shift-R במחשב מק)\n* אינטרנט אקספלורר: לחצו והחזיקו את המקש Ctrl בעת לחיצתכם על רענן (Refresh), או לחצו על צירוף המקשים Ctrl-F5\n* אופרה: נקו את המטמון ב־Tools‏ ← Preferences", - "usercssyoucanpreview": "'''עצה:''' השתמשו בלחצן \"{{int:showpreview}}\" כדי לבחון את גיליון ה־CSS החדש שלכם לפני השמירה.", - "userjsyoucanpreview": "'''עצה:''' השתמשו בלחצן \"{{int:showpreview}}\" כדי לבחון את סקריפט ה־JavaScript החדש שלכם לפני השמירה.", - "usercsspreview": "'''זכרו שזו רק תצוגה מקדימה של גיליון ה־CSS שלכם.'''\n'''הוא טרם נשמר!'''", - "userjspreview": "'''זכרו שזו רק בדיקה/תצוגה מקדימה של סקריפט ה־JavaScript שלכם.'''\n'''הוא טרם נשמר!'''", + "usercssyoucanpreview": "עצה: השתמשו בכפתור \"{{int:showpreview}}\" כדי לבחון את גיליון ה־CSS החדש שלכם לפני השמירה.", + "userjsyoucanpreview": "עצה: השתמשו בכפתור \"{{int:showpreview}}\" כדי לבחון את תסריט ה־JavaScript החדש שלכם לפני השמירה.", + "usercsspreview": "זִכרו שזו רק תצוגה מקדימה של גיליון ה־CSS שלכם.\nהוא עדיין לא נשמר!", + "userjspreview": "זִכרו שזו רק בדיקה/תצוגה מקדימה של תסריט ה־JavaScript שלכם.\nהוא עדיין לא נשמר!", "sitecsspreview": "'''זכרו שזו רק תצוגה מקדימה של גיליון ה־CSS הזה.'''\n'''הוא טרם נשמר!'''", "sitejspreview": "'''זכרו שזו רק תצוגה מקדימה של קוד ה־JavaScript הזה.'''\n'''הוא טרם נשמר!'''", "userinvalidcssjstitle": "'''אזהרה:''' העיצוב \"$1\" אינו קיים.\nדפי .css ו־.js מותאמים אישית משתמשים בכותרת עם אותיות קטנות – למשל, {{ns:user}}:דוגמה/vector.css ולא {{ns:user}}:דוגמה/Vector.css.", @@ -852,7 +852,7 @@ "revdelete-success": "מצב התצוגה של הגרסה שׁוּנה.", "revdelete-failure": "לא ניתן היה לשנות את מצב התצוגה של הגרסה:\n$1", "logdelete-success": "מצב התצוגה של פעולת היומן שׁוּנה.", - "logdelete-failure": "לא ניתן היה לשנות את מצב התצוגה של פעולת היומן:\n$1", + "logdelete-failure": "לא ניתן היה לשנות את מצב התצוגה של היומן:\n$1", "revdel-restore": "שינוי מצב התצוגה", "pagehist": "היסטוריית הדף", "deletedhist": "הגרסאות המחוקות", @@ -860,7 +860,7 @@ "revdelete-show-no-access": "שגיאה בהצגת הפריט מתאריך $2, $1: פריט זה סומן כ\"מוגבל\".\nאין לך גישה אליו.", "revdelete-modify-no-access": "שגיאה בשינוי הפריט מתאריך $2, $1: פריט זה סומן כ\"מוגבל\".\nאין לכם גישה אליו.", "revdelete-modify-missing": "שגיאה בשינוי פריט מספר $1: הוא אינו נמצא בבסיס הנתונים!", - "revdelete-no-change": "אזהרה: לפריט מ־$2, $1 כבר היו את הגדרות התצוגה שביקשת.", + "revdelete-no-change": "אזהרה: לפריט מ־$2, $1 כבר היו הגדרות התצוגה שביקשת.", "revdelete-concurrent-change": "שגיאה בשינוי הפריט מתאריך $2, $1: נראה שמצבו שונה על־ידי מישהו אחר בזמן שאתם ניסיתם לשנות אותו.\nאנא בדקו ביומנים.", "revdelete-only-restricted": "שגיאה בהסתרת הפריט מתאריך $2, $1: אין באפשרותך להעלים פריטים ממפעילי המערכת מבלי לבחור גם באחת מאפשרויות הנראוּת האחרות.", "revdelete-reason-dropdown": "* סיבות מחיקה נפוצות\n** הפרת זכויות יוצרים\n** תקציר עריכה או מידע אישי לא הולמים\n** שם משתמש לא הולם\n** מידע שעלול להיות לשון הרע", @@ -1093,7 +1093,7 @@ "userrights-notallowed": "אין לך הרשאה להוסיף או להסיר הרשאות של משתמשים.", "userrights-changeable-col": "קבוצות שבאפשרותכם לשנות", "userrights-unchangeable-col": "קבוצות שאין באפשרותכם לשנות", - "userrights-conflict": "התנגשות בין שינויי הרשאות משתמש! אנא בדקו את השינויים שלכם ואשרו אותם.", + "userrights-conflict": "התנגשות בין שינויי הרשאות משתמש! אנא בִּדקו את השינויים שלכם ואשרו אותם.", "userrights-removed-self": "הסרת את הרשאות המשתמש של עצמך. לכן אין לך כעת אפשרות לגשת לדף זה.", "group": "קבוצה:", "group-user": "משתמשים", @@ -1607,7 +1607,7 @@ "filerevert-badversion": "אין גרסה מקומית קודמת של הקובץ שהועלתה בתאריך המבוקש.", "filedelete": "מחיקת $1", "filedelete-legend": "מחיקת קובץ", - "filedelete-intro": "אתם עומדים למחוק את הקובץ '''[[Media:$1|$1]]''' יחד עם כל ההיסטוריה שלו.", + "filedelete-intro": "אתם עומדים למחוק את הקובץ [[Media:$1|$1]] יחד עם כל היסטוריית הגרסאות שלו.", "filedelete-intro-old": "אתם מוחקים את הגרסה של '''[[Media:$1|$1]]''' מ־[$4 $3, $2].", "filedelete-comment": "סיבה:", "filedelete-submit": "מחיקה", @@ -1905,7 +1905,7 @@ "emailpagetext": "ניתן להשתמש בטופס כדי לשלוח הודעת דואר אלקטרוני {{GENDER:$1|למשתמש זה|למשתמשת זו}}.\nכתובת הדואר האלקטרוני שכתבת ב[[Special:Preferences|העדפות המשתמש שלך]] תופיע ככתובת שההודעה נשלחה ממנה, כדי לאפשר תגובה ישירה.", "defemailsubject": "דוא\"ל מ{{grammar:תחילית|{{SITENAME}}}} מהמשתמש \"$1\"", "usermaildisabled": "שליחת דוא\"ל למשתמשים מבוטלת", - "usermaildisabledtext": "אינכם רשאים לשלוח דואר אלקטרוני למשתמשים אחרים באתר זה", + "usermaildisabledtext": "אינכם מורשים לשלוח דואר אלקטרוני למשתמשים אחרים באתר זה", "noemailtitle": "אין כתובת דואר אלקטרוני", "noemailtext": "משתמש זה לא הזין כתובת דואר אלקטרוני תקינה.", "nowikiemailtext": "משתמש זה בחר שלא לקבל דואר אלקטרוני ממשתמשים אחרים.", @@ -1927,7 +1927,7 @@ "usermessage-summary": "השארת הודעת מערכת.", "usermessage-editor": "שולח הודעות המערכת", "watchlist": "רשימת המעקב", - "mywatchlist": "רשימת מעקב", + "mywatchlist": "רשימת המעקב", "watchlistfor2": "עבור $1 $2", "nowatchlist": "אין דפים ברשימת המעקב.", "watchlistanontext": "נדרשת כניסה לחשבון כדי לצפות או לערוך פריטים ברשימת המעקב.", @@ -1960,8 +1960,8 @@ "wlshowhidemine": "עריכות שלי", "wlshowhidecategorization": "סיווג דפים לקטגוריות", "watchlist-options": "אפשרויות ברשימת המעקב", - "watching": "בהוספה לרשימת המעקב…", - "unwatching": "בהסרה מרשימת המעקב…", + "watching": "בהוספה לרשימת המעקב...", + "unwatching": "בהסרה מרשימת המעקב...", "watcherrortext": "אירעה שגיאה בעת שינוי הגדרות רשימת המעקב של \"$1\".", "enotif_reset": "סימון כל הדפים כאילו נצפו", "enotif_impersonal_salutation": "משתמש ב{{GRAMMAR:תחילית|{{SITENAME}}}}", @@ -2121,8 +2121,8 @@ "undelete-search-prefix": "הצגת דפים החל מ:", "undelete-search-submit": "חיפוש", "undelete-no-results": "לא נמצאו דפים תואמים בארכיון המחיקות.", - "undelete-filename-mismatch": "שחזור גרסת הקובץ מהתאריך $1 נכשל: שם קובץ לא תואם", - "undelete-bad-store-key": "שחזור גרסת הקובץ מהתאריך $1 נכשל: הקובץ היה חסר לפני המחיקה.", + "undelete-filename-mismatch": "לא ניתן לשחזר את גרסת הקובץ מ־$1: שם הקובץ לא תואם.", + "undelete-bad-store-key": "לא ניתן לשחזר את גרסת הקובץ מ־$1: הקובץ היה חסר לפני המחיקה.", "undelete-cleanup-error": "שגיאת בעת מחיקת קובץ הארכיון \"$1\" שאינו בשימוש.", "undelete-missing-filearchive": "שחזור קובץ הארכיון שמספרו $1 נכשל כיוון שהוא אינו בבסיס הנתונים. ייתכן שהוא כבר שוחזר.", "undelete-error": "שגיאה בשחזור דף", @@ -2184,7 +2184,7 @@ "whatlinkshere-submit": "הצגה", "autoblockid": "חסימה אוטומטית #$1", "block": "חסימת משתמש", - "unblock": "שחרור משתמש", + "unblock": "שחרור חסימה של משתמש", "blockip": "חסימת {{GENDER:$1|משתמש|משתמשת}}", "blockip-legend": "חסימת משתמש", "blockiptext": "השתמשו בטופס שלהלן כדי לחסום את הרשאות הכתיבה מכתובת IP או משתמש מסוימים.\nחסימות כאלה צריכות להתבצע רק כדי למנוע השחתה, ובהתאם ל[[{{MediaWiki:Policy-url}}|נהלים]].\nאנא מלאו את הסיבה הפרטנית לחסימה להלן (לדוגמה, באמצעות ציון דפים מסוימים שהשחית המשתמש).\nבאפשרותכם לחסום טווחי כתובות IP באמצעות תחביר [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; הטווח הגדול ביותר שניתן לחסום הוא /$1 עבור IPv4 ו־/$2 עבור IPv6.", @@ -2260,7 +2260,7 @@ "blocklogentry": "חסם את [[$1]] למשך $2 $3", "reblock-logentry": "שינה את הגדרות החסימה של [[$1]] עם זמן פקיעה של $2 $3", "blocklogtext": "זהו יומן פעולות החסימה והשחרור של משתמשים.\nכתובות IP שנחסמו אוטומטית אינן מופיעות.\nראו גם את [[Special:BlockList|רשימת החסומים]] לרשימה של החרמות וחסימות פעילות כעת.", - "unblocklogentry": "שחרר את $1", + "unblocklogentry": "שחרר את החסימה של $1", "block-log-flags-anononly": "משתמשים אנונימיים בלבד", "block-log-flags-nocreate": "יצירת חשבונות נחסמה", "block-log-flags-noautoblock": "חסימה אוטומטית מבוטלת", @@ -2276,7 +2276,7 @@ "ipb_already_blocked": "המשתמש \"$1\" כבר נחסם.", "ipb-needreblock": "$1 כבר נחסם. האם ברצונך לשנות את הגדרות החסימה?", "ipb-otherblocks-header": "{{PLURAL:$1|חסימה אחרת|חסימות אחרות}}", - "unblock-hideuser": "לא ניתן לשחרר משתמש זה, כיוון ששם המשתמש שלו הוסתר.", + "unblock-hideuser": "אין באפשרותך לשחרר את החסימה של המשתמש הזה, כיוון ששם המשתמש שלו הוסתר.", "ipb_cant_unblock": "שגיאה: חסימה מספר $1 לא נמצאה. ייתכן שהיא כבר שוחררה.", "ipb_blocked_as_range": "שגיאה: כתובת ה־IP $1 אינה חסומה ישירות ולכן לא ניתן לשחרר את חסימתה. עם זאת, היא חסומה כחלק מהטווח $2, שניתן לשחרר את חסימתו.", "ip_range_invalid": "טווח IP שגוי.", @@ -2292,7 +2292,7 @@ "lockdb": "נעילת בסיס נתונים", "unlockdb": "שחרור בסיס נתונים", "lockdbtext": "נעילת בסיס הנתונים תמנע ממשתמשים את האפשרות לערוך דפים, לשנות את העדפותיהם, לערוך את רשימות המעקב שלהם, ופעולות אחרות הדורשות ביצוע שינויים בבסיס הנתונים.\n\nאנא אשרו שזה מה שאתם מתכוונים לעשות, ושתשחררו את בסיס הנתונים מנעילה כאשר פעולת התחזוקה תסתיים.", - "unlockdbtext": "שחרור בסיס הנתונים מנעילה יחזיר למשתמשים את היכולת לערוך דפים, לשנות את העדפותיהם, לערוך את רשימות המעקב שלהם, ולבצע פעולות אחרות הדורשות ביצוע שינויים בבסיס הנתונים\nאנא אשרו שזה מה שבכוונתכם לעשות.", + "unlockdbtext": "שחרור בסיס הנתונים מנעילה יחזיר לכל המשתמשים את היכולת לערוך דפים, לשנות את העדפות המשתמש שלהם, לערוך את רשימות המעקב שלהם, ולבצע פעולות אחרות הדורשות ביצוע שינויים בבסיס הנתונים.\nאנא אשרו שזה מה אכן מה שברצונכם לעשות.", "lockconfirm": "כן, ברצוני לנעול את בסיס הנתונים.", "unlockconfirm": "כן, ברצוני לשחרר את בסיס הנתונים מנעילה.", "lockbtn": "נעילת בסיס הנתונים", @@ -2467,9 +2467,9 @@ "tooltip-pt-watchlist": "רשימת הדפים שאתם עוקבים אחרי השינויים בהם", "tooltip-pt-mycontris": "רשימת התרומות שלך", "tooltip-pt-anoncontribs": "רשימת העריכות שנעשו מכתובת ה־IP הזאת", - "tooltip-pt-login": "מומלץ להיכנס לחשבון; עם זאת, זה לא חובה", + "tooltip-pt-login": "מומלץ להיכנס לחשבון; עם זאת, אין חובה לעשות זאת", "tooltip-pt-logout": "יציאה מהחשבון", - "tooltip-pt-createaccount": "מומלץ ליצור חשבון ולהיכנס אליו; עם זאת, זה לא חובה", + "tooltip-pt-createaccount": "מומלץ ליצור חשבון ולהיכנס אליו; עם זאת, אין חובה לעשות זאת", "tooltip-ca-talk": "שיחה על דף זה", "tooltip-ca-edit": "עריכת דף זה באמצעות קוד ויקי", "tooltip-ca-addsection": "הוספת פסקה חדשה", @@ -2657,7 +2657,7 @@ "file-no-thumb-animation-gif": "'''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של תמונות GIF בעלות רזולוציה גבוהה כמו זאת לא תהיינה מונפשות.'''", "newimages": "גלריית קבצים חדשים", "imagelisttext": "להלן רשימה של {{PLURAL:$1|קובץ אחד|$1 קבצים}}, ממוינים $2:", - "newimages-summary": "דף זה מציג את הקבצים האחרונים שהועלו.", + "newimages-summary": "דף מיוחד זה מציג את הקבצים האחרונים שהועלו.", "newimages-legend": "מסנן", "newimages-label": "שם הקובץ (או חלק ממנו):", "newimages-showbots": "הצגת העלאות שבוצעו על־ידי בוטים", @@ -2729,8 +2729,8 @@ "exif-colorspace": "מרחב הצבע", "exif-componentsconfiguration": "משמעות כל רכיב", "exif-compressedbitsperpixel": "שיטת דחיסת התמונה", - "exif-pixelydimension": "רוחב התמונה הנכון", - "exif-pixelxdimension": "גובה התמונה הנכון", + "exif-pixelxdimension": "רוחב התמונה הנכון", + "exif-pixelydimension": "גובה התמונה הנכון", "exif-usercomment": "הערות המשתמש", "exif-relatedsoundfile": "קובץ שמע מקושר", "exif-datetimeoriginal": "התאריך והשעה של יצירת הקובץ", @@ -3133,9 +3133,9 @@ "watchlistedit-raw-done": "רשימת המעקב עודכנה.", "watchlistedit-raw-added": "{{PLURAL:$1|כותרת אחת נוספה|$1 כותרות נוספו}}:", "watchlistedit-raw-removed": "{{PLURAL:$1|כותרת אחת הוסרה|$1 כותרות הוסרו}}:", - "watchlistedit-clear-title": "רשימת המעקב נמחקה", + "watchlistedit-clear-title": "ניקוי רשימת המעקב", "watchlistedit-clear-legend": "ניקוי רשימת המעקב", - "watchlistedit-clear-explain": "כל הכותרות של הדפים שיוסרו מרשימת המעקב", + "watchlistedit-clear-explain": "כל הדפים יוסרו מרשימת המעקב שלך", "watchlistedit-clear-titles": "כותרות:", "watchlistedit-clear-submit": "ניקוי רשימת המעקב (לצמיתות!)", "watchlistedit-clear-done": "רשימת המעקב שלך נוקתה.", @@ -3260,7 +3260,6 @@ "redirect-not-exists": "הערך לא נמצא", "fileduplicatesearch": "חיפוש קבצים כפולים", "fileduplicatesearch-summary": "חיפוש קבצים כפולים על בסיס ערכי הגיבוב שלהם.", - "fileduplicatesearch-legend": "חיפוש קבצים כפולים", "fileduplicatesearch-filename": "קובץ:", "fileduplicatesearch-submit": "חיפוש", "fileduplicatesearch-info": "$1 × $2 פיקסלים
גודל הקובץ: $3
סוג MIME‏: $4", @@ -3672,17 +3671,17 @@ "sessionprovider-mediawiki-session-cookiesessionprovider": "התחברויות המבוססות על עוגיות", "sessionprovider-nocookies": "ייתכן שאפשרות השימוש בעוגיות כבויה. יש לוודא שאפשרות השימוש בעוגיות מופעלת ולהתחיל מחדש.", "randomrootpage": "דף שורש אקראי", - "log-action-filter-block": "סוג החסימות:", - "log-action-filter-delete": "סוג המחיקות:", + "log-action-filter-block": "סוג החסימה:", + "log-action-filter-delete": "סוג המחיקה:", "log-action-filter-patrol": "סוג השינויים הבדוקים:", "log-action-filter-protect": "סוג ההגנות:", "log-action-filter-upload": "סוג ההעלאות:", "log-action-filter-all": "הכול", - "log-action-filter-block-block": "חסימות", - "log-action-filter-block-reblock": "שינויי חסימה", - "log-action-filter-block-unblock": "שחרורי חסימה", + "log-action-filter-block-block": "חסימה", + "log-action-filter-block-reblock": "שינוי חסימה", + "log-action-filter-block-unblock": "שחרור חסימה", "log-action-filter-delete-delete": "מחיקת דפים", - "log-action-filter-delete-restore": "שחזור דפים מחוקים", + "log-action-filter-delete-restore": "שחזור דפים", "log-action-filter-delete-event": "מחיקת פעולות יומן", "log-action-filter-delete-revision": "מחיקת גרסאות", "log-action-filter-patrol-patrol": "סימוניים ידניים כבדוק", diff --git a/languages/i18n/hi.json b/languages/i18n/hi.json index c645b0c52b..a20bfe8c56 100644 --- a/languages/i18n/hi.json +++ b/languages/i18n/hi.json @@ -2769,8 +2769,8 @@ "exif-colorspace": "रंग स्थान", "exif-componentsconfiguration": "हर घटक का मतलब", "exif-compressedbitsperpixel": "चित्र कॉम्प्रेशन मोड", - "exif-pixelydimension": "छवि चौड़ाई", - "exif-pixelxdimension": "छवि ऊँचाई", + "exif-pixelxdimension": "छवि चौड़ाई", + "exif-pixelydimension": "छवि ऊँचाई", "exif-usercomment": "सदस्य टिप्पणी", "exif-relatedsoundfile": "संबंधित ध्वनी फ़ाईल", "exif-datetimeoriginal": "डाटा बनाने का दिनांक और समय", @@ -3273,7 +3273,6 @@ "redirect-not-exists": "यह मान प्राप्त नहीं हुआ", "fileduplicatesearch": "फ़ाईल द्विरावृत्ति खोजें", "fileduplicatesearch-summary": "हैश वैल्यू के अनुसार फ़ाईल की द्विरावृत्ति खोजें।", - "fileduplicatesearch-legend": "द्विरावृत्ति के लिये खोजें", "fileduplicatesearch-filename": "फ़ाईलनाम:", "fileduplicatesearch-submit": "खोजें", "fileduplicatesearch-info": "$1 × $2 पीक्सेल
फ़ाईल का आकार: $3
MIME प्रकार: $4", diff --git a/languages/i18n/hif-latn.json b/languages/i18n/hif-latn.json index e18aa14f46..e393e09d00 100644 --- a/languages/i18n/hif-latn.json +++ b/languages/i18n/hif-latn.json @@ -2466,8 +2466,8 @@ "exif-colorspace": "Rang ke jagha", "exif-componentsconfiguration": "Har ek component ke matlab", "exif-compressedbitsperpixel": "Chapa ke compression mode", - "exif-pixelydimension": "Chaapa ke thiik chaurrai", - "exif-pixelxdimension": "Chaapa ke thiik uunchai", + "exif-pixelxdimension": "Chaapa ke thiik chaurrai", + "exif-pixelydimension": "Chaapa ke thiik uunchai", "exif-usercomment": "Sadasysa ke bichar", "exif-relatedsoundfile": "Saathe waala awaaj waala file", "exif-datetimeoriginal": "Data generation ke tarik aur time", diff --git a/languages/i18n/hr.json b/languages/i18n/hr.json index dbe4fcb6ff..172ada99d5 100644 --- a/languages/i18n/hr.json +++ b/languages/i18n/hr.json @@ -609,7 +609,7 @@ "newarticle": "(Novo)", "newarticletext": "Došli ste na stranicu koja još ne postoji.\nAko želite stvoriti tu stranicu, počnite tipkati u prozor ispod ovog teksta (pogledajte [$1 stranicu za pomoć]).\nAko ste ovamo dospjeli slučajno, kliknite gumb '''natrag''' (back) u svom pregledniku.", "anontalkpagetext": "----''Ovo je stranica za razgovor s neprijavljenim suradnikom koji još nije otvorio suradnički račun ili se njime ne koristi. Zbog toga se moramo služiti brojčanom IP adresom kako bismo ga identificirali. Takvu adresu često može dijeliti više ljudi. Ako ste neprijavljeni suradnik i smatrate da su Vam upućeni irelevantni komentari, molimo Vas da [[Special:UserLogin/signup|otvorite suradnički račun]] ili [[Special:UserLogin|se prijavite]] te tako u budućnosti izbjegnete zamjenu s drugim neprijavljenim suradnicima.''", - "noarticletext": "Na ovoj stranici trenutačno nema sadržaja.\nMožete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane evidencije]\nili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti ovu stranicu].", + "noarticletext": "Na ovoj stranici trenutačno nema sadržaja.\nMožete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane evidencije]\nili [{{fullurl:{{FULLPAGENAME}}|action=edit}} stvoriti ovu stranicu].", "noarticletext-nopermission": "Ova stranica nema sadržaja.\nMožete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] na drugim stranicama ili [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane evidencije], ali ne možete stvoriti ovu stranicu.", "missing-revision": "Uređivanje broj $1 na stranici \"{{FULLPAGENAME}}\" ne postoji.\n\nOvo je obično uzrokovano kada kliknete na zastarjelu poveznicu na stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].", "userpage-userdoesnotexist": "Suradničko ime \"$1\" nije prijavljeno. Jeste li sigurni da želite stvoriti/uređivati ovu stranicu?", @@ -2213,18 +2213,14 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|promjena|promjene|promjena}} od $2", "javascripttest": "Testiranje JavaScripta", - "javascripttest-pagetext-noframework": "Ova je stranica rezervirana za izvršavanje JavaScript testova.", - "javascripttest-pagetext-unknownframework": "Nepoznata testna okolina \"$1\".", - "javascripttest-pagetext-frameworks": "Molimo izaberite jednu od sljedećih testnih okolina: $1", - "javascripttest-pagetext-skins": "Izaberite temu (''skin'') za testiranje:", "javascripttest-qunit-intro": "Pogledajte [$1 testnu dokumentaciju] na mediawiki.org.", "tooltip-pt-userpage": "Stranica suradnika {{GENDER:|Your user}}", "tooltip-pt-anonuserpage": "Suradnička stranica za IP adresu pod kojom uređujete", - "tooltip-pt-mytalk": "Moja stranica za razgovor", + "tooltip-pt-mytalk": "Vaša stranica za razgovor", "tooltip-pt-anontalk": "Razgovor o suradnicima s ove IP adrese", "tooltip-pt-preferences": "Vaše postavke", "tooltip-pt-watchlist": "Popis stranica koje pratite.", - "tooltip-pt-mycontris": "Popis mojih doprinosa", + "tooltip-pt-mycontris": "Popis Vaših doprinosa", "tooltip-pt-login": "Predlažemo Vam da se prijavite, ali nije obvezno.", "tooltip-pt-logout": "Odjavi se", "tooltip-pt-createaccount": "Nudimo vam mogućnost da napravite račun i prijavite se, iako to nije nužno.", @@ -2467,8 +2463,8 @@ "exif-colorspace": "Kolor prostor", "exif-componentsconfiguration": "Značenje pojedinih komponenti", "exif-compressedbitsperpixel": "Dubina boje poslije sažimanja", - "exif-pixelydimension": "Važeća širina slike", - "exif-pixelxdimension": "Važeća visina slike", + "exif-pixelxdimension": "Važeća širina slike", + "exif-pixelydimension": "Važeća visina slike", "exif-usercomment": "Suradnički komentar", "exif-relatedsoundfile": "Povezani zvučni zapis", "exif-datetimeoriginal": "Datum i vrijeme slikanja", @@ -2954,7 +2950,6 @@ "redirect-file": "Datotečno ime", "fileduplicatesearch": "Traži kopije datoteka", "fileduplicatesearch-summary": "Traži kopije datoteka na temelju njihove hash vrijednosti.", - "fileduplicatesearch-legend": "Traži kopije datoteka", "fileduplicatesearch-filename": "Ime datoteke:", "fileduplicatesearch-submit": "Traži", "fileduplicatesearch-info": "$1 × $2 piksela
Veličina datoteke: $3
MIME tip: $4", diff --git a/languages/i18n/hrx.json b/languages/i18n/hrx.json index 160e2b6d02..f9e8744cee 100644 --- a/languages/i18n/hrx.json +++ b/languages/i18n/hrx.json @@ -2370,8 +2370,8 @@ "exif-colorspace": "Farrebraum", "exif-componentsconfiguration": "Bedeitung einzelner Komponente", "exif-compressedbitsperpixel": "Komprimierte Bits por Pixel", - "exif-pixelydimension": "Bildbreit", - "exif-pixelxdimension": "Bildhöch", + "exif-pixelxdimension": "Bildbreit", + "exif-pixelydimension": "Bildhöch", "exif-usercomment": "Benutzerkommentare", "exif-relatedsoundfile": "Zugehöriche Tondatei", "exif-datetimeoriginal": "Erfassungszeitpunkt", diff --git a/languages/i18n/hsb.json b/languages/i18n/hsb.json index 6e8b482cab..ef601ec809 100644 --- a/languages/i18n/hsb.json +++ b/languages/i18n/hsb.json @@ -2455,8 +2455,8 @@ "exif-colorspace": "Barbny rum", "exif-componentsconfiguration": "Woznam kóždeje komponenty", "exif-compressedbitsperpixel": "Modus wobrazoweje kompresije", - "exif-pixelydimension": "Šěrokosć wobraza", - "exif-pixelxdimension": "Wysokosć wobraza", + "exif-pixelxdimension": "Šěrokosć wobraza", + "exif-pixelydimension": "Wysokosć wobraza", "exif-usercomment": "Přispomjenja wužiwarja", "exif-relatedsoundfile": "Zwjazana zynkowa dataja", "exif-datetimeoriginal": "Datum a čas wutworjenja datow", diff --git a/languages/i18n/hu.json b/languages/i18n/hu.json index 36bd896cc1..f5679bf075 100644 --- a/languages/i18n/hu.json +++ b/languages/i18n/hu.json @@ -2706,8 +2706,8 @@ "exif-colorspace": "Színtér", "exif-componentsconfiguration": "Az egyes összetevők jelentése", "exif-compressedbitsperpixel": "Képtömörítési mód", - "exif-pixelydimension": "Képszélesség", - "exif-pixelxdimension": "Képmagasság", + "exif-pixelxdimension": "Képszélesség", + "exif-pixelydimension": "Képmagasság", "exif-usercomment": "Felhasználók megjegyzései", "exif-relatedsoundfile": "Kapcsolódó hangfájl", "exif-datetimeoriginal": "EXIF információ létrehozásának dátuma", @@ -3160,7 +3160,6 @@ "redirect-not-exists": "Érték nem található", "fileduplicatesearch": "Duplikátumok keresése", "fileduplicatesearch-summary": "Fájlok duplikátumainak keresése hash értékük alapján.", - "fileduplicatesearch-legend": "Duplikátum keresése", "fileduplicatesearch-filename": "Fájlnév:", "fileduplicatesearch-submit": "Keresés", "fileduplicatesearch-info": "$1 × $2 pixel
Fájlméret: $3
MIME-típus: $4", diff --git a/languages/i18n/ia.json b/languages/i18n/ia.json index c33e046ad6..eab02cccb9 100644 --- a/languages/i18n/ia.json +++ b/languages/i18n/ia.json @@ -2693,8 +2693,8 @@ "exif-colorspace": "Spatio de colores", "exif-componentsconfiguration": "Significato de cata componente", "exif-compressedbitsperpixel": "Modo de compression del imagine", - "exif-pixelydimension": "Latitude del imagine", - "exif-pixelxdimension": "Altitude del imagine", + "exif-pixelxdimension": "Latitude del imagine", + "exif-pixelydimension": "Altitude del imagine", "exif-usercomment": "Commentos del usator", "exif-relatedsoundfile": "File audio connexe", "exif-datetimeoriginal": "Data e hora del generation del datos", @@ -3148,7 +3148,6 @@ "redirect-not-exists": "Valor non trovate", "fileduplicatesearch": "Cercar files duplicate", "fileduplicatesearch-summary": "Cercar files duplicate a base de lor summas de verification ''(hash).''", - "fileduplicatesearch-legend": "Cercar un duplicato", "fileduplicatesearch-filename": "Nomine del file:", "fileduplicatesearch-submit": "Cercar", "fileduplicatesearch-info": "$1 × $2 pixel
Grandor del file: $3
Typo MIME: $4", diff --git a/languages/i18n/id.json b/languages/i18n/id.json index c710172173..303668219c 100644 --- a/languages/i18n/id.json +++ b/languages/i18n/id.json @@ -2756,8 +2756,8 @@ "exif-colorspace": "Ruang warna", "exif-componentsconfiguration": "Arti tiap komponen", "exif-compressedbitsperpixel": "Mode kompresi gambar", - "exif-pixelydimension": "Lebar gambar", - "exif-pixelxdimension": "Tinggi gambar", + "exif-pixelxdimension": "Lebar gambar", + "exif-pixelydimension": "Tinggi gambar", "exif-usercomment": "Komentar pengguna", "exif-relatedsoundfile": "Berkas audio yang berhubungan", "exif-datetimeoriginal": "Tanggal dan waktu pembuatan data", diff --git a/languages/i18n/ilo.json b/languages/i18n/ilo.json index c39fece918..66eab0a399 100644 --- a/languages/i18n/ilo.json +++ b/languages/i18n/ilo.json @@ -2659,8 +2659,8 @@ "exif-colorspace": "Espasio ti maris", "exif-componentsconfiguration": "Kaibuksilan iti tunggal maysa a komponente", "exif-compressedbitsperpixel": "Moda ti kompresion ti ladawan", - "exif-pixelydimension": "Kaakaba ti ladawan", - "exif-pixelxdimension": "Katayag ti ladawan", + "exif-pixelxdimension": "Kaakaba ti ladawan", + "exif-pixelydimension": "Katayag ti ladawan", "exif-usercomment": "Dagiti komentario ti agar-aramat", "exif-relatedsoundfile": "Mainaig a papeles ti audio", "exif-datetimeoriginal": "Petsa ken oras ti pannakaaramid ti datos", diff --git a/languages/i18n/inh.json b/languages/i18n/inh.json index 24aaf0f4ff..cb12531afb 100644 --- a/languages/i18n/inh.json +++ b/languages/i18n/inh.json @@ -377,7 +377,7 @@ "accmailtitle": "КъайладIоагӀа дӀадахьийтад", "newarticle": "(Kерда)", "newarticletext": "Шо хьожаяргаца дехьадаьннад йоаца оагӀув тӀа.\nИз кхолларгьйолаш кӀалхагӀа доала корачу текст Iочуязаде (нагахьа кхетаде хала дале [$1 новкъосталан оагӀувага] хьажа).\nЦа ховш укхаза нийсденнадале, шоай браузера кнопка '''Юха''' тӀа пӀелга тоӀабе.", - "noarticletext": "Ð¥Iанз укх оагӀув тӀа яздам доацаш да.\n[[Special:Search/{{PAGENAME}}|цу тайпара цӀи дувцам кораде]] кхыдола йоазувашках йийша я шун, вешта\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тара дола таптарий йоазув карае], е\n'''[{{fullurl:{{FULLPAGENAME}}|action=edit}} изза мо цӀи йолаш оагӀув ела]'''.", + "noarticletext": "Ð¥Iанз укх оагӀув тӀа текст яц.\nШун аьттув ба [[Special:Search/{{PAGENAME}}|цу тайпара цӀи хьоаяр кораде]] кхыйола йоазуваш чу, иштта\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тара дола тептарий яздаьраш], е\n'''[{{fullurl:{{FULLPAGENAME}}|action=edit}} изза мо цӀи йолаш оагӀув кхолла]'''.", "noarticletext-nopermission": "Ð¥Iанз укх оагӀув тӀа яздам дац.\nШун йиш я, кхыдола йоазувнашках [[Special:Search/{{PAGENAME}}|дола цӀерий хаттам корае]] е [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} нийсамий тептара йоазувнаш корае].", "note": "'''ХӀамоалар:'''", "previewnote": "'''Хьалхе б|аргтассам мара бац.'''\nЯздам кхы яздаь дац!", @@ -446,7 +446,7 @@ "searchresults-title": "\"$1\" тохка", "notextmatches": "ОагIувнаша яздамий вIашагIакхетараш дац", "prevn": "{{PLURAL:$1|хьалхйоагlар $1|хьалхйоагlараш $1|хьалхйоагlараш $1}}", - "nextn": "{{PLURAL:$1|тlехьайоагlар $1|тlехьайоагlараш $1|тlехьайоагlараш $1}}", + "nextn": "{{PLURAL:$1|1=тIехьайоагIар|тIехьайоагIараш}} $1", "prevn-title": "{{PLURAL:$1|1=$1 хьалхара йоазув|$1 хьалхара йоазувнаш}}", "nextn-title": "{{PLURAL:$1|1=$1 тIехьара йоазув|$1 тIехьара йоазувнаш}}", "shown-title": "Хьóкха $1 {{PLURAL:$1|даь йоазо|даь йоазонаш}} укх оáгIувна тIа", @@ -551,13 +551,16 @@ "recentchanges-label-minor": "ЗIамига хувцам я", "recentchanges-label-bot": "Ер хувцам бIатаца яь е", "recentchanges-label-unpatrolled": "Ер хувцам ший моттиге кхы дIадехьаяьккхаяц.", + "recentchanges-label-plusminus": "байташкахь боарам хувцар", + "recentchanges-legend-heading": "Легенда: ", + "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (хьажа иштта [[Special:NewPages|керда оагIувнашка]])", "rcnotefrom": "КIалхагIа хувцамаш хьахьекха я $2 денза ($1 кхачалца).", "rclistfrom": "$3 $2 тIара хувцамаш хьахьокха", "rcshowhideminor": "$1 зIамига хувцамаш", "rcshowhideminor-hide": "Къайлдаккха", "rcshowhidebots": "$1 боташ", "rcshowhidebots-show": "Хьахьокха", - "rcshowhideliu": "Чубаьнначара дакъалаьцархочий $1", + "rcshowhideliu": "$1 бовзийтарчара доакъашхой", "rcshowhideliu-hide": "Къайлдаккха", "rcshowhideanons": "$1 цIияьккханза дакъалаьцархой", "rcshowhideanons-show": "Хьахьокха", @@ -708,6 +711,7 @@ "undelete-search-submit": "Хьалáха", "namespace": "ЦIерий аренаш", "invert": "Хьаржар юхадаккха", + "namespace_association": "Ювзаенна мотт", "blanknamespace": "(Кертера)", "contributions": "{{GENDER:$1|Доакъашхочунна}} къахьегам", "contributions-title": "$1 дакъалаьцархочунна къахьегам", @@ -853,8 +857,8 @@ "exif-imagedescription": "Сурта цIи", "exif-artist": "Яздархо", "exif-colorspace": "Басара аре", - "exif-pixelydimension": "Сурта шерал", - "exif-pixelxdimension": "Сурта лакхал", + "exif-pixelxdimension": "Сурта шерал", + "exif-pixelydimension": "Сурта лакхал", "exif-datetimedigitized": "Оцифровк яь таьрахь а, ха а", "exif-writer": "Яздама да", "exif-languagecode": "Мотт", diff --git a/languages/i18n/is.json b/languages/i18n/is.json index 9e0fd9f82e..6cc3b26b83 100644 --- a/languages/i18n/is.json +++ b/languages/i18n/is.json @@ -2603,8 +2603,8 @@ "exif-colorspace": "Litrýmd", "exif-componentsconfiguration": "Merking hverrar einingar", "exif-compressedbitsperpixel": "Aðferð við myndþjöppun", - "exif-pixelydimension": "Breidd myndar", - "exif-pixelxdimension": "Hæð myndar", + "exif-pixelxdimension": "Breidd myndar", + "exif-pixelydimension": "Hæð myndar", "exif-usercomment": "Athugunarsemdir notanda", "exif-relatedsoundfile": "Tengd hljóðskrá", "exif-datetimeoriginal": "Upprunaleg dagsetning", diff --git a/languages/i18n/it.json b/languages/i18n/it.json index 270c002096..c460df0ad3 100644 --- a/languages/i18n/it.json +++ b/languages/i18n/it.json @@ -2792,8 +2792,8 @@ "exif-colorspace": "Spazio dei colori", "exif-componentsconfiguration": "Significato di ciascuna componente", "exif-compressedbitsperpixel": "Modalità di compressione immagine", - "exif-pixelydimension": "Larghezza immagine", - "exif-pixelxdimension": "Altezza immagine", + "exif-pixelxdimension": "Larghezza immagine", + "exif-pixelydimension": "Altezza immagine", "exif-usercomment": "Note dell'utente", "exif-relatedsoundfile": "File audio collegato", "exif-datetimeoriginal": "Data e ora di creazione dei dati", @@ -3259,7 +3259,6 @@ "redirect-not-exists": "Valore non trovato", "fileduplicatesearch": "Ricerca dei file duplicati", "fileduplicatesearch-summary": "Ricerca di eventuali duplicati del file in base al valore di ''hash''.", - "fileduplicatesearch-legend": "Ricerca di un duplicato", "fileduplicatesearch-filename": "Nome del file:", "fileduplicatesearch-submit": "Ricerca", "fileduplicatesearch-info": "$1 × $2 pixel
Dimensione del file: $3
Tipo MIME: $4", diff --git a/languages/i18n/ja.json b/languages/i18n/ja.json index 3a076094db..d1667fee28 100644 --- a/languages/i18n/ja.json +++ b/languages/i18n/ja.json @@ -2801,8 +2801,8 @@ "exif-colorspace": "色空間情報", "exif-componentsconfiguration": "各コンポーネントの意味", "exif-compressedbitsperpixel": "画像圧縮モード", - "exif-pixelydimension": "実効画像の幅", - "exif-pixelxdimension": "実効画像の高さ", + "exif-pixelxdimension": "実効画像の幅", + "exif-pixelydimension": "実効画像の高さ", "exif-usercomment": "ユーザー コメント", "exif-relatedsoundfile": "関連音声ファイル", "exif-datetimeoriginal": "原画像データの生成日時", @@ -3325,7 +3325,6 @@ "redirect-not-exists": "値が見つかりません", "fileduplicatesearch": "重複ファイルの検索", "fileduplicatesearch-summary": "重複ファイルをハッシュ値に基づいて検索します。", - "fileduplicatesearch-legend": "重複の検索", "fileduplicatesearch-filename": "ファイル名:", "fileduplicatesearch-submit": "検索", "fileduplicatesearch-info": "$1 × $2 ピクセル
ファイルサイズ: $3
MIME タイプ: $4", diff --git a/languages/i18n/jv.json b/languages/i18n/jv.json index 8a4924e8f9..6b5ad535a9 100644 --- a/languages/i18n/jv.json +++ b/languages/i18n/jv.json @@ -67,54 +67,54 @@ "editfont-serif": "Aksara (font) Serif", "sunday": "Minggu", "monday": "Senèn", - "tuesday": "Slasa", + "tuesday": "Selasa", "wednesday": "Rebo", "thursday": "Kemis", - "friday": "Jemuwah", + "friday": "Jumuwah", "saturday": "Setu", "sun": "Min", "mon": "Sen", "tue": "Sel", - "wed": "Rab", - "thu": "Kam", - "fri": "Jem", + "wed": "Reb", + "thu": "Kem", + "fri": "Jum", "sat": "Set", "january": "Januari", - "february": "Fébruari", + "february": "Pébruari", "march": "Maret", "april": "April", - "may_long": "Méi", + "may_long": "Mèi", "june": "Juni", "july": "Juli", "august": "Agustus", - "september": "September", + "september": "Sèptèmber", "october": "Oktober", - "november": "November", + "november": "Nopèmber", "december": "Désèmber", "january-gen": "Januari", - "february-gen": "Fébruari", + "february-gen": "Fèbruari", "march-gen": "Maret", "april-gen": "April", "may-gen": "Méi", "june-gen": "Juni", "july-gen": "Juli", "august-gen": "Agustus", - "september-gen": "September", + "september-gen": "Sèptèmber", "october-gen": "Oktober", - "november-gen": "November", + "november-gen": "Nopèmber", "december-gen": "Désèmber", "jan": "Jan", - "feb": "Feb", + "feb": "Pèb", "mar": "Mar", "apr": "Apr", - "may": "Méi", + "may": "Mèi", "jun": "Jun", "jul": "Jul", "aug": "Agu", - "sep": "Sep", + "sep": "Sèp", "oct": "Okt", - "nov": "Nov", - "dec": "Des", + "nov": "Nop", + "dec": "Dès", "january-date": "Januari $1", "february-date": "Februari $1", "march-date": "Maret $1", @@ -128,7 +128,7 @@ "november-date": "$1 Novèmber", "december-date": "$1 Dèsèmber", "pagecategories": "{{PLURAL:$1|Kategori|Kategori}}", - "category_header": "Artikel ing kategori \"$1\"", + "category_header": "Kaca sajeroning kategori \"$1\"", "subcategories": "Subkategori", "category-media-header": "Média ing kategori \"$1\"", "category-empty": "''Kategori iki saiki ora ngandhut artikel utawa média.''", @@ -153,8 +153,8 @@ "mypage": "Kaca", "mytalk": "Wicara", "anontalk": "Dhiskusi IP puniki", - "navigation": "Pandhu Arah", - "and": " Lan", + "navigation": "Napigasi", + "and": " lan", "qbfind": "Golèk", "qbbrowse": "Navigasi", "qbedit": "Sunting", @@ -163,28 +163,28 @@ "faq": "FAQ (Pitakonan sing kerep diajokaké)", "faqpage": "Project:FAQ", "actions": "Tindakan", - "namespaces": "Ruang jeneng", - "variants": "Varian", - "navigation-heading": "Menu navigasi", + "namespaces": "Lowah aran", + "variants": "Parian", + "navigation-heading": "Menu napigasi", "errorpagetitle": "Kasalahan", - "returnto": "Bali menyang $1.", + "returnto": "Bali nyang $1.", "tagline": "Saka {{SITENAME}}", "help": "Pitulung", - "search": "Panggolèkan", + "search": "Golèk", "searchbutton": "Golèk", "go": "Nuju menyang", - "searcharticle": "Nuju menyang", - "history": "Vèrsi sadurungé", + "searcharticle": "Menyang", + "history": "Sajarah kaca", "history_short": "Vèrsi lawas", "updatedmarker": "diowahi wiwit kunjungan pungkasanku", - "printableversion": "Versi cithak", + "printableversion": "Cara cithakan", "permalink": "Pranala permanèn", "print": "Cithak", "view": "Pirsani", - "view-foreign": "Pirsani ing $1", - "edit": "Sunting", + "view-foreign": "Deleng nyang $1", + "edit": "Besut", "create": "Nggawé", - "create-local": "Tambah pawedharan lokal", + "create-local": "Tambah wedharan enggon-enggonan", "editthispage": "Sunting kaca iki", "create-this-page": "Nggawé kaca iki", "delete": "Busak", @@ -199,11 +199,11 @@ "unprotectthispage": "Owahi pangreksan kaca iki", "newpage": "Kaca anyar", "talkpage": "Dhiskusèkna kaca iki", - "talkpagelinktext": "Wicara", + "talkpagelinktext": "gunem", "specialpage": "Kaca astaméwa", - "personaltools": "Piranti pribadi", + "personaltools": "Piranti pribadhi", "articlepage": "nDeleng artikel", - "talk": "Dhiskusi", + "talk": "Rembug", "views": "Tampilan", "toolbox": "Piranti", "userpage": "Ndeleng kaca panganggo", @@ -214,55 +214,55 @@ "viewhelppage": "Ndeleng kaca pitulung", "categorypage": "Ndeleng kaca kategori", "viewtalkpage": "Ndeleng kaca dhiskusi", - "otherlanguages": "Basa liya", + "otherlanguages": "Jeroning basa liya", "redirectedfrom": "(Dialihkan dari $1)", "redirectpagesub": "Kaca pangalihan", - "lastmodifiedat": "Kaca iki diowahi pungkasané nalika $2, $1.", + "lastmodifiedat": "Kaca iki pungkasan diowah kala $1, tabuh $2.", "viewcount": "Kaca iki wis tau diaksès cacahé ping {{PLURAL:$1|siji|$1}}.", "protectedpage": "Kaca sing direksa", - "jumpto": "Langsung menyang:", - "jumptonavigation": "navigasi", + "jumpto": "Jujug:", + "jumptonavigation": "napigasi", "jumptosearch": "golèk", "view-pool-error": "Nyuwun ngapuro, peladèn lagi sibuk wektu iki.\nKakèhan panganggo sing nyoba mbukak kaca iki.\nEntèni sedhéla sadurungé nyoba ngaksès kaca iki manèh .\n\n$1", "pool-timeout": "Kelangkung wekdal nengga kunci", "pool-queuefull": "Kempalan antrian kebak", "pool-errorunknown": "Kalepata ingkang mboten dipun mangertosi", - "aboutsite": "Prakara {{SITENAME}}", - "aboutpage": "Project:Prakara", + "aboutsite": "Bab {{SITENAME}}", + "aboutpage": "Project:Bab", "copyright": "Kabèh isi kasedyakaké miturut $1.", "copyrightpage": "{{ns:project}}:Hak cipta", - "currentevents": "Prastawa saiki", - "currentevents-url": "Project:Prastawa saiki", - "disclaimers": "Pamaidonan", - "disclaimerpage": "Project:Panyangkalan umum", - "edithelp": "Pitulung panyuntingan", - "mainpage": "Kaca Utama", - "mainpage-description": "Kaca Utama", + "currentevents": "Kadadéan saiki", + "currentevents-url": "Project:Kadadéan saiki", + "disclaimers": "Sélakan", + "disclaimerpage": "Project:Sélakan umum", + "edithelp": "Pitulung besut", + "mainpage": "Kaca Pokok", + "mainpage-description": "Kaca pokok", "policy-url": "Project:Kabijakan", - "portal": "Gapura komunitas", - "portal-url": "Project:Portal komunitas", - "privacy": "Kebijakan privasi", - "privacypage": "Project:Kabijakan privasi", + "portal": "Gapura paguyuban", + "portal-url": "Project:Garupa paguyuban", + "privacy": "Niti pripasi", + "privacypage": "Project:Niti pripasi", "badaccess": "Aksès ora olèh", "badaccess-group0": "Panjenengan ora pareng nglakokaké tindhakan sing panjenengan gayuh.", "badaccess-groups": "Pratingkah panjenengan diwatesi tumrap panganggo ing {{PLURAL:$2|klompoké|klompoké}}: $1.", "versionrequired": "Dibutuhaké MediaWiki vèrsi $1", "versionrequiredtext": "MediaWiki vèrsi $1 dibutuhaké kanggo nggunakaké kaca iki. Mangga mirsani [[Special:Version|kaca iki]]", "ok": "OK", - "retrievedfrom": "Sumber artikel iki saka kaca situs web: \"$1\"", + "retrievedfrom": "Dijupuk saka: \"$1\"", "youhavenewmessages": "Panjenengan kagungan $1 ($2).", "youhavenewmessagesfromusers": "Sampéyan nduwé $1 saka {{PLURAL:$3|panganggo liya|$3 panganggo}} ($2).", "youhavenewmessagesmanyusers": "Sampéyang nduwé $1 saka akèh panganggo ($2).", "newmessageslinkplural": "{{PLURAL:$1|layang anyar|999=layang anyar}}", "newmessagesdifflinkplural": "{{PLURAL:$1|owahan|999=owahan}} pungkasan", "youhavenewmessagesmulti": "Panjenengan olèh pesen-pesen anyar $1", - "editsection": "sunting", - "editold": "sunting", + "editsection": "besut", + "editold": "besut", "viewsourceold": "deleng sumber", - "editlink": "sunting", + "editlink": "besut", "viewsourcelink": "deleng sumber", - "editsectionhint": "Sunting bagian: $1", - "toc": "Bab lan paragraf", + "editsectionhint": "Besut pérangan: $1", + "toc": "Isi", "showtoc": "tuduhna", "hidetoc": "delikna", "collapsible-collapse": "Singidaken", @@ -274,22 +274,23 @@ "feed-invalid": "Tipe permintaan asupan ora bener.", "feed-unavailable": "Umpan sindikasi (''syndication feeds'') ora kasedyakaké", "site-rss-feed": "$1 ''RSS Feed''", - "site-atom-feed": "$1 ''Atom Feed''", + "site-atom-feed": "Umpan atom $1", "page-rss-feed": "\"$1\" ''RSS Feed''", "page-atom-feed": "\"$1\" ''Atom Feed''", "red-link-title": "$1 (kaca durung ana)", "sort-descending": "Urutaké medhun", "sort-ascending": "Urutaké munggah", - "nstab-main": "Artikel", - "nstab-user": "Panganggo", + "nstab-main": "Kaca", + "nstab-user": "Kaca panganggo", "nstab-media": "Media", - "nstab-special": "Astamiwa", - "nstab-project": "Proyek", - "nstab-image": "Gambar", + "nstab-special": "Kaca mirunggan", + "nstab-project": "Kaca proyèk", + "nstab-image": "Barkas", "nstab-mediawiki": "Pariwara", - "nstab-template": "Cithak", + "nstab-template": "Cithakan", "nstab-help": "Pitulung", "nstab-category": "Kategori", + "mainpage-nstab": "Kaca pokok", "nosuchaction": "Ora ana pratingkah kaya ngono", "nosuchactiontext": "Pratingkah sing dirinci déning URL ora sah.\nPanjenengan manawa salah ketik nalika ngisi URL, utawa salah ngisi pranala.\nIki manawa uga nuduhaké anané kesalahan ing piranti alus sing dipigunakaké déning {{SITENAME}}.", "nosuchspecialpage": "Ora ana kaca astaméwa kaya ngono", @@ -323,12 +324,12 @@ "cannotdelete-title": "Ora bisa mbusak kaca \"$1\"", "delete-hook-aborted": "Pambusakan dibatalaké déning ''hook''.\nOra ana alesané.", "no-null-revision": "Ora isa nggawe revisi 'null' anyar kanggo kaca \"$1\"", - "badtitle": "Judhulé ora sah", + "badtitle": "Sésirah ala", "badtitletext": "Judhul kaca sing panjenengan ora bisa dituduhaké, kosong, utawa dadi judhul antar-basa utawa judhul antar-wiki. Iku bisa uga ana sawijining utawa luwih aksara sing ora bisa didadèkaké judhul.", "perfcached": "Data iki mung dijupuk saka papan singgahan lan mungkin ora kaanyaran. Maksimum {{PLURAL:$1|sak asil|$1 asil}} sumadhiya nèng papan singgahan.", "perfcachedts": "Data iki mung dijupuk saka papan singgahan lan mungkin dianyari pungkasan $1. Maksimum {{PLURAL:$4|sak asil|$4 asil}} sumadhiya nèng papan singgahan.", "querypage-no-updates": "Update saka kaca iki lagi dipatèni. Data sing ana ing kéné saiki ora bisa bakal dibalèni unggah manèh.", - "viewsource": "Tuduhna sumber", + "viewsource": "Deleng sumber", "viewsource-title": "Delok sumberé $1", "actionthrottled": "Tindakan diwatesi", "actionthrottledtext": "Minangka sawijining pepesthèn anti-spam, panjenengan diwatesi nglakoni tindhakan iki sing cacahé kakèhan ing wektu cendhak.\nMangga dicoba manèh ing sawetara menit.", @@ -361,37 +362,37 @@ "welcomecreation-msg": "Akun panjenengan wis kacipta. Aja lali nata konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] panjenengan.", "yourname": "Asma pangangeman", "userlogin-yourname": "Jeneng panganggo", - "userlogin-yourname-ph": "Lebokaké jenengné panganggo", + "userlogin-yourname-ph": "Isi jeneng panganggo Sampéyan", "createacct-another-username-ph": "Lebokna jeneng panganggo:", "yourpassword": "Tembung sandhi:", - "userlogin-yourpassword": "Tembung sandhi", + "userlogin-yourpassword": "Tembung wadi", "userlogin-yourpassword-ph": "Lebokna tembung sandhi", "createacct-yourpassword-ph": "Lebokna tembung sandhi", "yourpasswordagain": "Balènana tembung sandhi", "createacct-yourpasswordagain": "Konfirmasi tembung sandhi", "createacct-yourpasswordagain-ph": "Lebokna tembung sandhi maneh", "remembermypassword": "Émut tembung sandi kula (salebeting $1 {{PLURAL:$1|dinten|dinten}})", - "userlogin-remembermypassword": "Gawe supaya aku tetep mlebet log terus", + "userlogin-remembermypassword": "Panggah mlebu", "userlogin-signwithsecure": "Nganggo koneksi aman", "yourdomainname": "Dhomain panjenengan", "password-change-forbidden": "Sampéyan ora bisa ngganti tembung sandhi nèng wiki iki.", "externaldberror": "Ana kasalahan otèntikasi basis dhata èksternal utawa panjenengan ora pareng nglakoni pemutakhiran marang akun èksternal panjenengan.", - "login": "Mlebu log", + "login": "Mlebu", "nav-login-createaccount": "Log mlebu / nggawé rékening (akun)", "userlogin": "Mlebu log / gawé rékening (akun)", "userloginnocreate": "Mlebu log", "logout": "Oncat", "userlogout": "Metu log", "notloggedin": "Durung mlebu log", - "userlogin-noaccount": "Durung kagungan akun?", - "userlogin-joinproject": "Gabung {{SITENAME}}", + "userlogin-noaccount": "Durung duwé akun?", + "userlogin-joinproject": "Mèlua {{SITENAME}}", "nologin": "Durung kagungan asma panganggo? '''$1'''.", "nologinlink": "Ndaftaraké akun anyar", - "createaccount": "Nggawé akun anyar", + "createaccount": "Gawé akun", "gotaccount": "Wis kagungan akun? '''$1'''.", "gotaccountlink": "Mlebu", "userlogin-resetlink": "Lali rincian mlebu log Sampéyan?", - "userlogin-resetpassword-link": "Sampéyan kélangan tembung sandhi?", + "userlogin-resetpassword-link": "Lali tembung wadiné Sampéyan?", "userlogin-loggedin": "Sampeyan sampun mlebet log dadi {{GENDER:$1|$1}}.\nGunakna formulir ing ngisor iki kanggo mlebet log dadi panganggo liyane.", "userlogin-createanother": "Gawé akun anyar", "createacct-emailrequired": "Alamat layang èlèktronik", @@ -456,8 +457,8 @@ "loginlanguagelabel": "Basa: $1", "suspicious-userlogout": "Panjaluk panjenengan supaya metu ditolak amarga katoné panjlajah internt utawa proksi panyinggah.", "createacct-another-realname-tip": "Jeneng asli ora kudu dilebokake.\n\nYen sampeyan milih nglebokake jeneng asli, jeneng kuwi bakal dinggo ngwenehi atribusi kanggo karya-karyane.", - "pt-login": "Mlebet log", - "pt-createaccount": "Damel akun enggal", + "pt-login": "Mlebu", + "pt-createaccount": "Gawé akun", "php-mail-error-unknown": "Kasalahan ora dingertèni nèng piguna mail() PHP.", "user-mail-no-addy": "Njajal ngirim layang èlèktronik tanpa alamat layang èlèktronik.", "user-mail-no-body": "Nyoba ngirim layang e-mail, tapi isine kosong.", @@ -510,14 +511,14 @@ "resettokens-watchlist-token": "Token kangge sindikasi web (Atom/RSS) saking [[Special:Watchlist|pangowahan ing daptar pangawasan sampeyan]]", "resettokens-done": "Reset token.", "resettokens-resetbutton": "Reset token sing dipilih", - "bold_sample": "Tèks iki bakal dicithak kandel", - "bold_tip": "Cithak kandel", - "italic_sample": "Tèks iki bakal dicithak miring", + "bold_sample": "Tulisan kandel", + "bold_tip": "Tulisann kandel", + "italic_sample": "Tulisan miring", "italic_tip": "Cithak miring", - "link_sample": "Judhul pranala", + "link_sample": "Sesirah pranala", "link_tip": "Pranala njero", - "extlink_sample": "http://www.example.com judhul pranala", - "extlink_tip": "Pranala njaba (aja lali wiwitan http:// )", + "extlink_sample": "http://www.example.com sesirahing pranala", + "extlink_tip": "Pranala jaba (élinga ater-ater http://)", "headline_sample": "Tèks judhul", "headline_tip": "Subbagian tingkat 1", "nowiki_sample": "Tèks iki ora bakal diformat", @@ -525,17 +526,17 @@ "image_sample": "Conto.jpg", "image_tip": "Mènèhi gambar/berkas", "media_sample": "Conto.ogg", - "media_tip": "Pranala berkas media", + "media_tip": "Pranala barkas", "sig_tip": "Tapak asta panjenengan mawa tandha wektu", "hr_tip": "Garis horisontal", - "summary": "Ringkesan:", + "summary": "Tingkesan:", "subject": "Subyek/judhul:", - "minoredit": "Iki suntingan cilik.", + "minoredit": "Iki besutan cilik", "watchthis": "Awasana kaca iki", "savearticle": "Simpen kaca", "preview": "Pratayang", "showpreview": "Mirsani pratayang", - "showdiff": "Tuduhna pangowahan", + "showdiff": "Tuduhaké owahan", "anoneditwarning": "Penget: Panjenengan boten mlebet log. Alamat IP Panjenengan badhe katingal dening publik manawi Panjenengan ngayahi ewah-ewahan. Manawi Panjenengan [$1 mlebet log] utawai [$2 damel akun], suntingan Panjenengan badhe kaatribusekaken dhumateng nama pangangge Panjenengan, lan rupi-rupi kauntungan sanesipun.", "anonpreviewwarning": "''Sampéyan durung mlebu log. Nyimpen bakal nyathet alamat IP Sampéyan nèng riwayat sunting kaca iki.''", "missingsummary": "'''Pènget:''' Panjenengan ora nglebokaké ringkesan panyuntingan. Menawa panjenengan mencèt tombol Simpen manèh, suntingan panjenengan bakal kasimpen tanpa ringkesan panyuntingan.", @@ -552,7 +553,7 @@ "nosuchsectiontitle": "Bagéan ora ditemokaké", "nosuchsectiontext": "Panjenengan nyoba nyunting sawijining bagéan sing ora ana.\nBagéan iki manawa wis dipindhah utawa dibusak nalika panjenengan buka.", "loginreqtitle": "Mangga mlebu log", - "loginreqlink": "mlebu log", + "loginreqlink": "mlebu", "loginreqpagetext": "Panjenengan kudu $1 kanggo bisa mirsani kaca liyané.", "accmailtitle": "Tembung sandhi wis dikirim.", "accmailtext": "Sawijining tembung sandi sembarang kanggo [[User talk:$1|$1]] wis dikirim menyang $2.\n\nTembung sandi kanggo panganggo anyar iki isa diganti ing kaca ''[[Special:ChangePassword|ganti tembung sandi]]'' sawisé mlebu log.", @@ -582,7 +583,7 @@ "session_fail_preview_html": "'''Nuwun sèwu! Kita ora bisa prosès suntingan panjenengan amerga data sési ilang.'''\n\n''Amerga wiki iki ngidinaké panrapan HTML mentah, pratayang didelikaké minangka penggakan marang serangan Javascript.''\n\n'''Yèn iki sawijining upaya suntingan sing absah, mangga dicoba manèh. Yèn isih tetep ora kasil, cobanen metu log utawa oncat lan mlebua manèh.'''", "token_suffix_mismatch": "'''Suntingan panjenengan ditulak amerga aplikasi klièn panjenengan ngowahi karakter tandha wewacan ing suntingan. Suntingan iku ditulak kanggo untuk menggak kaluputan ing tèks artikel. Prekara iki kadhangkala dumadi yèn panjenengan ngangem dines layanan proxy anonim adhedhasar situs wèb sing duwé masalah.'''", "edit_form_incomplete": "'''Sebagéyan pormulir suntingan ora tekan nèng sasana; cèk pindho yèn suntingan Sampéyan isih wutuh lan jajal manèh.'''", - "editing": "Nyunting $1", + "editing": "Mbesut $1", "creating": "Nggawé $1", "editingsection": "Nyunting $1 (bagian)", "editingcomment": "Nyunting $1 (bagéyan anyar)", @@ -604,8 +605,8 @@ "templatesused": "{{PLURAL:$1|Cithakan|Cithakan}} sing dienggo ing kaca iki:", "templatesusedpreview": "{{PLURAL:$1|Cithakan|Cithakan-cithakan}} sing dienggo ing pratilik iki:", "templatesusedsection": "{{PLURAL:$1|Cithakan}} sing dienggo ding bagian iki:", - "template-protected": "(direksa)", - "template-semiprotected": "(semi-pangreksan)", + "template-protected": "(kareksa)", + "template-semiprotected": "(semu kareksa)", "hiddencategories": "Kaca iki sawijining anggota saka {{PLURAL:$1|1 kategori ndelik|$1 kategori-kategori ndelik}}:", "edittools": "", "nocreatetext": "Situs iki ngwatesi kemampuan kanggo nggawé kaca anyar. Panjenengan bisa bali lan nyunting kaca sing wis ana, utawa mangga [[Special:UserLogin|mlebua log utawa ndaftar]]", @@ -668,7 +669,7 @@ "currentrevisionlink": "Revisi saiki", "cur": "saiki", "next": "sabanjuré", - "last": "akir", + "last": "sadurung", "page_first": "kapisan", "page_last": "pungkasan", "histlegend": "Pilihen rong tombol radhio banjur pencèten tombol ''bandhingna'' kanggo mbandhingaké versi. Klik sawijining tanggal kanggo ndeleng versi kaca ing tanggal iku.
(skr) = prabédan karo vèrsi saiki, (akir) = prabédan karo vèrsi sadurungé, '''s''' = suntingan sithik, '''b''' = suntingan bot, → = suntingan bagian, ← = ringkesan otomatis", @@ -770,15 +771,15 @@ "difference-title": "$1: Bèntenipun revisi", "difference-title-multipage": "Prabédhan antara kaca \"$1\" lan \"$2\"", "difference-multipage": "(Prabédhan antar kaca)", - "lineno": "Larikan $1:", + "lineno": "Larik $1:", "compareselectedversions": "Bandhingna vèrsi kapilih", "showhideselectedversions": "Tampilaké/dhelikaké révisi kapilih", - "editundo": "batalna", + "editundo": "wurungaké", "diff-empty": "(Ora ana bedane)", "diff-multi-manyusers": "({{PLURAL:$1Siji rèvisi sedhengan|$1 rèvisi sedhengan}} déning luwih saka $2 {{PLURAL:$2|panganggo|panganggo}} ora dituduhaké)", "difference-missing-revision": "{{PLURAL:$2|Sak pambenahan|$2 pambenahan}} saka prabédan iki ($1) {{PLURAL:$2|ora ditemokaké|ora ditemokaké}}.\n\nIki biasané kasebab pranala prabedan sing wis ora kanggo saka kaca isi wis dibusak.\nRinciané bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log busak].", - "searchresults": "Kasil panggolèkan", - "searchresults-title": "Kasil panggolèkan saka \"$1\"", + "searchresults": "Kasiling golèk", + "searchresults-title": "Kasiling golèk \"$1\"", "titlematches": "Irah-irahan artikel sing cocog", "textmatches": "Tèks artikel sing cocog", "notextmatches": "Ora ana tèks kaca sing cocog", @@ -792,16 +793,16 @@ "searchmenu-new": "'''Damel kaca \"[[:$1]]\" ing wiki punika!'''", "searchprofile-articles": "Kaca isi", "searchprofile-images": "Multimedia", - "searchprofile-everything": "Kabèh", + "searchprofile-everything": "Samubarang", "searchprofile-advanced": "Tataran luwih dhuwur/maju", - "searchprofile-articles-tooltip": "Panggolèkan ing $1", - "searchprofile-images-tooltip": "Panggolèkan berkas", + "searchprofile-articles-tooltip": "Golèkan ing $1", + "searchprofile-images-tooltip": "Golèk barkas", "searchprofile-everything-tooltip": "Panggolèkan kabèh isi (klebu kaca-kaca wicara)", "searchprofile-advanced-tooltip": "Panggolèkan ing bilik jeneng biasa (''custom'')", "search-result-size": "$1 ({{PLURAL:$2|1 tembung|$2 tembung}})", "search-result-category-size": "{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkatégori|$2 subkatégori}}, {{PLURAL:$3|1 berkas|$3 berkas}})", "search-redirect": "(pangalihan $1)", - "search-section": "(sèksi $1)", + "search-section": "(pérangan $1)", "search-suggest": "Apa panjenengan kersané: $1", "search-interwiki-caption": "Proyèk-proyèk kagandhèng", "search-interwiki-default": "Pituwas $1:", @@ -1075,14 +1076,14 @@ "nchanges": "$1 {{PLURAL:$1|pangowahan|owah-owahan}}", "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|saka keri dhewe mrene}}", "enhancedrc-history": "sajarah", - "recentchanges": "Owah-owahan", + "recentchanges": "Owahan pungkasan", "recentchanges-legend": "Pilihan owah-owahan pungkasan", "recentchanges-summary": "Runutna owah-owahan pungkasan ing wiki iki ing kaca iki.", "recentchanges-noresult": "Ora ana pangowahan ing periode sing diwiwiti kriteria iki.", "recentchanges-feed-description": "Urutna owah-owahan anyar ing wiki ing ''feed'' iki.", - "recentchanges-label-newpage": "Suntingan iki gawé kaca anyar", - "recentchanges-label-minor": "Iki suntingan sithik", - "recentchanges-label-bot": "Suntingan iki diayahi déning bot", + "recentchanges-label-newpage": "Besutan iki nggawé kaca anyar", + "recentchanges-label-minor": "Iki besutan cilik", + "recentchanges-label-bot": "Besutan iki diayahi bot", "recentchanges-label-unpatrolled": "Suntingan iki durung dipatroli", "recentchanges-label-plusminus": "Agengipun kaca sampun dipunowahi samekaten.", "recentchanges-legend-heading": "Katrangan:", @@ -1090,41 +1091,41 @@ "recentchanges-legend-plusminus": "(''±123'')", "rcnotefrom": "Ing ngisor iki owah-owahan wiwit $2 (kapacak nganti $1 owah-owahan).", "rclistfrom": "Saiki nuduhaké owah-owahan wiwit tanggal $3 $2", - "rcshowhideminor": "$1 suntingan sithik", + "rcshowhideminor": "$1 besutan cilik", "rcshowhideminor-hide": "Singidaken", "rcshowhidebots": "$1 bot", - "rcshowhidebots-show": "Tedahaken", - "rcshowhideliu": "$1 panganggo sing wis ndaptar", + "rcshowhidebots-show": "Tuduhaké", + "rcshowhideliu": "$1 panganggo karégister", "rcshowhideliu-hide": "Singidaken", "rcshowhideanons": "$1 panganggo anonim", "rcshowhideanons-hide": "Singidaken", "rcshowhidepatr": "$1 suntingan sing dipatroli", - "rcshowhidemine": "$1 suntinganku", + "rcshowhidemine": "$1 besutanku", "rcshowhidemine-hide": "Singidaken", "rclinks": "Tuduhna owah-owahan pungkasan $1 ing $2 dina pungkasan iki.
$3", - "diff": "béda", - "hist": "sajarah", + "diff": "béd", + "hist": "saj", "hide": "Delikna", - "show": "Tuduhna", - "minoreditletter": "s", + "show": "Tuduhaké", + "minoreditletter": "c", "newpageletter": "A", "boteditletter": "b", "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|cacahé sing ngawasi|cacahé sing ngawasi}}]", "rc_categories": "Watesana nganti kategori (dipisah karo \"|\")", "rc_categories_any": "Apa waé", - "rc-change-size-new": "$1 {{PLURAL:$1|bita|bita}} sakwisé diowah", + "rc-change-size-new": "$1 {{PLURAL:$1|bét|bét}} sabubaré diowah", "newsectionsummary": "/* $1 */ bagéyan anyar", "rc-enhanced-expand": "Tuduhaké princèn", "rc-enhanced-hide": "Dhelikaké princèn", "rc-old-title": "wigatiné digawé minangka \"$1\"", - "recentchangeslinked": "Pangowahan sing terkait", + "recentchangeslinked": "Owahan magepokan", "recentchangeslinked-feed": "Pangowahan sing terkait", - "recentchangeslinked-toolbox": "Pangowahan sing terkait", + "recentchangeslinked-toolbox": "Owahan magepokan", "recentchangeslinked-title": "Owah-owahan sing ana gandhèngané karo \"$1\"", "recentchangeslinked-summary": "Kaca astaméwa (kaca kusus) iki mènèhi daftar owah-owahan pungkasan ing kaca-kaca sing kagandhèng (utawa anggota sawijining kateogri). Kaca sing [[Special:Watchlist|panjenengan awasi]] ditandhani '''kandel'''.", "recentchangeslinked-page": "Jeneng kaca:", "recentchangeslinked-to": "Nuduhaké owah-owahan menyang kaca sing disambung menyang kaca-kaca iki", - "upload": "Unggah", + "upload": "Unggah barkas", "uploadbtn": "Unggahna berkas", "reuploaddesc": "Bali ing formulir pamotan", "upload-tryagain": "Kirim déskripsi berkas sing wis diowah", @@ -1141,7 +1142,7 @@ "uploadlogpage": "Log pangunggahan", "uploadlogpagetext": "Ing ngisor iki kapacak log pangunggahan berkas sing anyar dhéwé.\nMangga mirsani [[Special:NewFiles|galeri berkas-berkas anyar]] kanggo pratélan visual.", "filename": "Jeneng berkas", - "filedesc": "Ringkesan", + "filedesc": "Tingkesan", "fileuploadsummary": "Ringkesan:", "filereuploadsummary": "Owah-owahan berkas:", "filestatus": "Status hak cipta", @@ -1282,14 +1283,14 @@ "upload-curl-error28": "Pangunggahan ngliwati wektu", "upload-curl-error28-text": "Situsé kesuwèn sadurungé réaksi.\nMangga dipriksa menawa situsé aktif, nunggu sedélok lan coba manèh.\nMbok-menawa panjenengan bisa nyoba manèh ing wektu sing luwih longgar.", "license": "Jenis lisènsi:", - "license-header": "Jinis lisènsi", + "license-header": "Pamalilah", "nolicense": "Durung ana sing dipilih", "license-nopreview": "(Pratayang ora sumedya)", "upload_source_url": " (sawijining URL absah sing bisa diaksès publik)", "upload_source_file": " (sawijining berkas ing komputeré panjenengan)", "listfiles-summary": "Kaca astamiwa nudhuhaké kabèh berkas kaunggah.\nYèn disaring déning panganggo, namung berkas mawa vèrsi paling anyar waé sing bakal katon.", "listfiles_search_for": "Golèk jeneng gambar:", - "imgfile": "gambar", + "imgfile": "barkas", "listfiles": "Daftar gambar", "listfiles_thumb": "Gambar mini", "listfiles_date": "Tanggal", @@ -1302,21 +1303,21 @@ "listfiles-latestversion": "Versi saiki", "listfiles-latestversion-yes": "Iya", "listfiles-latestversion-no": "Ora", - "file-anchor-link": "Gambar", + "file-anchor-link": "Barkas", "filehist": "Sajarah berkas", "filehist-help": "Klik ing tanggal/wektu kanggo deleng berkas iki ing wektu iku.", "filehist-deleteall": "busaken kabèh", "filehist-deleteone": "busaken iki", "filehist-revert": "balèkna", - "filehist-current": "saiki iki", - "filehist-datetime": "Tanggal/Wektu", + "filehist-current": "saiki", + "filehist-datetime": "Surya/Tabuh", "filehist-thumb": "Miniatur (''thumbnail'')", "filehist-thumbtext": "Miniatur kanggo versi ing $1", "filehist-nothumb": "Ora ana miniatur", "filehist-user": "Panganggo", "filehist-dimensions": "Ukuran", "filehist-filesize": "Gedhené berkas", - "filehist-comment": "Komentar", + "filehist-comment": "Tanggapan", "imagelinks": "Panganggoan berkas", "linkstoimage": "Kaca-kaca sing kapacak iki duwé {{PLURAL:$1|pranala|$1 pranala}} menyang berkas iki:", "linkstoimage-more": "Luwih saka $1 {{PLURAL:$1|kaca|kaca-kaca}} nduwèni pranala menyang berkas iki.\nDhaftar ing ngisor nuduhaké {{PLURAL:$1|kaca pisanan kanthi pranala langsung|$1 kaca kanthi pranala langsung}} menyang berkas iki.\n[[Special:WhatLinksHere/$2|dhaftar pepak]] uga ana.", @@ -1368,7 +1369,7 @@ "unusedtemplates": "Cithakan sing ora dienggo", "unusedtemplatestext": "Kaca iki ngamot kabèh kaca ing bilik jeneng {{ns:template}} sing ora dianggo ing kaca ngendi waé.\nPriksanen dhisik pranala-pranala menyang cithakan iki sadurungé mbusak.", "unusedtemplateswlh": "pranala liya-liyané", - "randompage": "Sembarang kaca", + "randompage": "Waton kaca", "randompage-nopages": "Ora ana kaca ing {{PLURAL:$2||}}bilik jeneng iki:$1.", "randomincategory": "Sembarang kaca ing kategori", "randomincategory-invalidcategory": "\"$1\" dudu jeneng kategori sing apik.", @@ -1504,9 +1505,9 @@ "prevpage": "Kaca sadurungé ($1)", "allpagesfrom": "Kaca-kaca kawiwitan kanthi:", "allpagesto": "Tampilaké kaca dipungkasi ing:", - "allarticles": "Kabèh artikel", + "allarticles": "Kabèh kaca", "allinnamespace": "Kabeh kaca ($1 namespace)", - "allpagessubmit": "Madosi", + "allpagessubmit": "Menyang", "allpagesprefix": "Kapacak kaca-kaca ingkang mawi ater-ater:", "allpagesbadtitle": "Irah-irahan (judhul) ingkang dipun-gunaaken boten sah utawi nganggé ater-ater (awalan) antar-basa utawi antar-wiki. Irah-irahan punika saged ugi nganggé setunggal aksara utawi luwih ingkang boten saged kagunaaken dados irah-irahan.", "allpages-bad-ns": "{{SITENAME}} ora duwé bilik nama \"$1\".", @@ -1514,7 +1515,7 @@ "cachedspecial-viewing-cached-ttl": "Sampéyan lagi ndelok vèrsi cadhangan saka kaca iki, sing bisa dadi lawasé wis $1.", "cachedspecial-viewing-cached-ts": "Sampéyan lagi ndelok vèrsi cadhangan saka kaca iki, sing bisa dadi ora padha karo kasunyatan.", "cachedspecial-refresh-now": "Delok sing paling anyar.", - "categories": "Daftar kategori", + "categories": "Kategori", "categoriespagetext": "{{PLURAL:$1|kategori ing ngisor iki ngandhut|kategori ing ngisor iki ngandhut}} kaca utawa media.\n[[Special:UnusedCategories|Kategori sing ora dianggo]] ora ditampilaké ing kéné.\nDeleng uga [[Special:WantedCategories|kategori sing diperlokaké]].", "categoriesfrom": "Tampilaké kategori-kategori diwiwiti saka:", "special-categories-sort-count": "urutna miturut angka", @@ -1594,7 +1595,7 @@ "addedwatchtext": "Kaca \"[[:$1]]\" wis ditambahaké menyang [[Special:Watchlist|daftar pangawasan]].\nOwah-owahan sing dumadi ing tembé ing kaca iku lan kaca dhiskusi sing kagandhèng, bakal dipacak ing kéné.", "removewatch": "Singkiraké saka daptar pangawasan", "removedwatchtext": "Kaca \"[[:$1]]\" wis dibusak saka [[Special:Watchlist|daftar pangawasan]].", - "watch": "tutana", + "watch": "Awati", "watchthispage": "Periksa kaca iki", "unwatch": "Ora usah ngawasaké manèh", "unwatchthispage": "Batalna olèhé ngawasi kaca iki", @@ -1757,12 +1758,12 @@ "undelete-error-long": "Ana kaluputan nalika mbatalaké pambusakan berkas:\n\n$1", "undelete-show-file-confirm": "Apa panjenengan yakin arep mirsani révisi berkas \"$1\" sing wis kabusak ing $2 jam $3?", "undelete-show-file-submit": "Ya", - "namespace": "Bilik nama (bilik jeneng):", + "namespace": "Lowah aran:", "invert": "Balèkna pilihan", "tooltip-invert": "Centhang kothak iki kanggo ndhelikaké owahan saka kaca-kaca nèng njero bilik jeneng kapilih (lan bilik jeneng kakait yèn dicenthang)", "namespace_association": "Bilik jeneng kakait", "tooltip-namespace_association": "Centhang kothak iki kanggo nglebokaké uga bilik jeneng gumenan utawa subyèk sing kakait karo bilik jeneng kapilih", - "blanknamespace": "(Utama)", + "blanknamespace": "(Pokok)", "contributions": "Sumbangan {{GENDER:$1|panganggo}}", "contributions-title": "Kontribusi panganggo kanggo $1", "mycontris": "Kontribusi", @@ -1786,13 +1787,13 @@ "sp-contributions-username": "Alamat IP utawa jeneng panganggo:", "sp-contributions-toponly": "Tuduhaké was suntingan saka benahan pungkasan", "sp-contributions-submit": "Golèk", - "whatlinkshere": "Pranala balik", - "whatlinkshere-title": "Kaca-kaca sing duwé pranala menyang \"$1\"", + "whatlinkshere": "Sing nggayut mréné", + "whatlinkshere-title": "Kaca mawa pranala nggayut \"$1\"", "whatlinkshere-page": "Kaca:", "linkshere": "Kaca-kaca iki nduwé pranala menyang '''[[:$1]]''':", "nolinkshere": "Ora ana kaca sing nduwé pranala menyang '''[[:$1]]'''.", "nolinkshere-ns": " Ora ana kaca sing nduwé pranala menyang '''[[:$1]]''' ing bilik jeneng sing kapilih.", - "isredirect": "kaca pangalihan", + "isredirect": "kaca lihlihan", "istemplate": "karo cithakan", "isimage": "pranala berkas", "whatlinkshere-prev": "{{PLURAL:$1|sadurungé|$1 sadurungé}}", @@ -1802,7 +1803,7 @@ "whatlinkshere-hidetrans": "$1 transklusi", "whatlinkshere-hidelinks": "pranala-pranala $1", "whatlinkshere-hideimages": "$1 pranala berkas", - "whatlinkshere-filters": "Filter-filter", + "whatlinkshere-filters": "Panyaringan", "autoblockid": "Blokir otomatis #$1", "block": "Blokir panganggo", "unblock": "Uculaké blokirané panganggo", @@ -1866,7 +1867,7 @@ "blocklist-nousertalk": "ora éntuk nyunting kaca gunemané dhéwé", "ipblocklist-empty": "Daftar pamblokiran kosong.", "ipblocklist-no-results": "alamat IP utawa panganggo sing disuwun ora diblokir.", - "blocklink": "blokir", + "blocklink": "palang", "unblocklink": "jabel blokir", "change-blocklink": "owahi blokir", "contribslink": "sumbangan", @@ -2004,7 +2005,7 @@ "allmessages-prefix": "Saring nganggo ater-ater:", "allmessages-language": "Basa:", "allmessages-filter-submit": "Tumuju menyang", - "thumbnail-more": "Gedhèkna", + "thumbnail-more": "Gedhèkaké", "filemissing": "Berkas ora ditemokaké", "thumbnail_error": "Kaluputan nalika nggawé gambar cilik (''thumbnail''): $1", "thumbnail_error_remote": "Peringatan kasalahan saka $1:\n$2", @@ -2061,10 +2062,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|révisi|révisi}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|révisi}} saka $2", "javascripttest": "Panjajalan JavaScript", - "javascripttest-pagetext-noframework": "Kaca iki disadhiyakaké kanggo nglakokaké panjajalan JavaScript.", - "javascripttest-pagetext-unknownframework": "Rangka kerja panjajalan ora dingertèni \"$1\".", - "javascripttest-pagetext-frameworks": "Mangga pilih sawiji saka rangka kerja panjajalan iki: $1", - "javascripttest-pagetext-skins": "Pilih kulit kanggo nglakokaké panjajalan mawa:", "javascripttest-qunit-intro": "Delok [dhokumèntasi panjajalan $1] nèng mediawiki.org.", "tooltip-pt-userpage": "Kaca panganggo panjenengan", "tooltip-pt-anonuserpage": "Kaca panganggo IP panjenengan", @@ -2073,12 +2070,12 @@ "tooltip-pt-preferences": "Préferènsiku", "tooltip-pt-watchlist": "Daftar kaca sing tak-awasi.", "tooltip-pt-mycontris": "Daftar kontribusi panjenengan", - "tooltip-pt-login": "Panjenengan diaturi mlebu log, nanging ora dikudokaké.", - "tooltip-pt-logout": "Log metu (oncat)", - "tooltip-pt-createaccount": "Panjenengan kasuwun damel akun lan mlebet log; ananging bab punika boten wajib", - "tooltip-ca-talk": "Dhiskusi perkara isi", - "tooltip-ca-edit": "Sunting kaca iki. Nganggoa tombol pratayang sadurungé nyimpen.", - "tooltip-ca-addsection": "Miwiti bagèyan anyar", + "tooltip-pt-login": "Sampéyan prayogané mlebu masiya ora kudu", + "tooltip-pt-logout": "Metu", + "tooltip-pt-createaccount": "Sampéyan prayogané gawé akun lan mlebu masiya ora kudu", + "tooltip-ca-talk": "Parembuganing kaca isi", + "tooltip-ca-edit": "Besut kaca iki", + "tooltip-ca-addsection": "Wiwiti pérangan anyar", "tooltip-ca-viewsource": "Kaca iki direksa. Panjenengan namung bisa mirsani sumberé.", "tooltip-ca-history": "Vèrsi-vèrsi sadurungé saka kaca iki.", "tooltip-ca-protect": "Reksa kaca iki", @@ -2088,33 +2085,33 @@ "tooltip-ca-move": "Pindhahen kaca iki", "tooltip-ca-watch": "Tambahna kaca iki ing daftar pangawasan panjenengan", "tooltip-ca-unwatch": "Busak kaca iki saka daftar pangawasan panjenengan", - "tooltip-search": "Golek ing situs {{SITENAME}} iki", - "tooltip-search-go": "Lungaa ing kaca mawa jeneng persis iki, yèn anaa", - "tooltip-search-fulltext": "Golèk kaca sing duwé tèks kaya mangkéné", - "tooltip-p-logo": "Kaca Utama", - "tooltip-n-mainpage": "Nuwèni Kaca Utama", - "tooltip-n-mainpage-description": "Pirsani Kaca Utama", - "tooltip-n-portal": "Perkara proyèk, apa sing bisa panjenengan gayuh, lan ing ngendi golèk apa-apa", + "tooltip-search": "Golèk nyang {{SITENAME}}", + "tooltip-search-go": "Jujug kaca asesirah persis mangkéné yèn ana", + "tooltip-search-fulltext": "Golèk kaca isi tulisan kaya mangkéné", + "tooltip-p-logo": "Menyang kaca pokok", + "tooltip-n-mainpage": "Menyang kaca pokok", + "tooltip-n-mainpage-description": "Menyang kaca pokok", + "tooltip-n-portal": "Bab proyèk, apa sing bisa Sampéyan garap, ana ing endi saprelu golèk apa-apa", "tooltip-n-currentevents": "Temokna informasi perkara prastawa anyar", - "tooltip-n-recentchanges": "Daftar owah-owahan anyar ing wiki.", - "tooltip-n-randompage": "Tuduhna sembarang kaca", - "tooltip-n-help": "Papan kanggo golèk pitulung.", - "tooltip-t-whatlinkshere": "Daftar kabèh kaca wiki sing nyambung menyang kaca iki", + "tooltip-n-recentchanges": "Pratélaning owah-owahan pungkasan sajeroning wiki.", + "tooltip-n-randompage": "Mot waton kaca", + "tooltip-n-help": "Papan kanggo golèk weruh", + "tooltip-t-whatlinkshere": "Pratélaning kabèh kaca wiki sing nggayut mréné", "tooltip-t-recentchangeslinked": "Owah-owahan pungkasan kaca-kaca sing duwé pranala menyang kaca iki", "tooltip-feed-rss": "''RSS feed'' kanggo kaca iki", "tooltip-feed-atom": "''Atom feed'' kanggo kaca iki", "tooltip-t-contributions": "Deleng daftar kontribusi panganggo iki", "tooltip-t-emailuser": "Kirimna e-mail menyang panganggo iki", - "tooltip-t-upload": "Ngunggah gambar utawa berkas média", - "tooltip-t-specialpages": "Daftar kabèh kaca astaméwa (kaca kusus)", - "tooltip-t-print": "Vèrsi cithak kaca iki", + "tooltip-t-upload": "Unggah barkas", + "tooltip-t-specialpages": "Pratélaning kabèh kaca mirunggan", + "tooltip-t-print": "Cara cithakan kaca iki", "tooltip-t-permalink": "Pranala permanèn kanggo révisi kaca iki", - "tooltip-ca-nstab-main": "Ndeleng kaca artikel", + "tooltip-ca-nstab-main": "Deleng kaca isi", "tooltip-ca-nstab-user": "Deleng kaca panganggo", "tooltip-ca-nstab-media": "Ndeleng kaca média", "tooltip-ca-nstab-special": "Iki kaca astaméwa utawa kaca kusus sing ora bisa disunting", "tooltip-ca-nstab-project": "Deleng kaca proyèk", - "tooltip-ca-nstab-image": "Deleng kaca berkas", + "tooltip-ca-nstab-image": "Deleng kaca barkas", "tooltip-ca-nstab-mediawiki": "Ndeleng pesenan sistém", "tooltip-ca-nstab-template": "Deleng cithakan", "tooltip-ca-nstab-help": "Mirsani kaca pitulung", @@ -2132,7 +2129,7 @@ "tooltip-rollback": "Mbalèkaké suntingan-suntingan ing kaca iki menyang kontributor pungkasan nganggo sak klik.", "tooltip-undo": "Mbalèkaké révisi iki lan mbukak kothak panyuntingan jroning mode pratayang. Wènèhi kasempatan kanggo ngisi alesan ing kothak ringkesan.", "tooltip-preferences-save": "Simpen préperensi", - "tooltip-summary": "Lebokna ringkesan cendhèk", + "tooltip-summary": "Isi tingkesan cendhak", "anonymous": "{{PLURAL:$1|Panganggo|panganggo}} anon ing {{SITENAME}}.", "siteuser": "Panganggo {{SITENAME}} $1", "anonuser": "Panganggo anonim {{SITENAME}} $1", @@ -2183,7 +2180,7 @@ "pageinfo-hidden-categories": "{{PLURAL:$1|Katégori|Katégori}} kadhelikaké ($1)", "pageinfo-templates": "{{PLURAL:$1|Templat|Templat}} yang ditransklusi ($1)", "pageinfo-transclusions": "{{PLURAL:$1|Kaca|Kaca}} sing ditransklusi ing ($1)", - "pageinfo-toolboxlink": "Informasi kaca", + "pageinfo-toolboxlink": "Katerangan kaca", "pageinfo-redirectsto": "Dialihaké dhateng", "pageinfo-redirectsto-info": "info", "pageinfo-contentpage": "Diétung minangka satunggaling kaca isi", @@ -2229,7 +2226,7 @@ "svg-long-desc": "Berkas SVG, nominal $1 × $2 piksel, gedhené berkas: $3", "svg-long-desc-animated": "Berkas SVG, nominal $1 × $2 piksel, gedhené berkas: $3", "svg-long-error": "Berkas SVG ora sah: $1", - "show-big-image": "Berkas asli", + "show-big-image": "Barkas asli", "show-big-image-preview": "Gedhéné pratayang iki: $1", "show-big-image-other": "{{PLURAL:$2|Résolusi|Résolusi}} liya: $1.", "show-big-image-size": "$1 × $2 piksel", @@ -2299,21 +2296,21 @@ "exif-datetime": "Tanggal lan wektu pangowahan berkas", "exif-imagedescription": "Judhul gambar", "exif-make": "Produsèn kamera", - "exif-model": "Modhèl kamera", - "exif-software": "Perangkat lunak", + "exif-model": "Modhèl kaméra", + "exif-software": "Piranti alus sing dianggo", "exif-artist": "Prodhusèn", "exif-copyright": "Sing ndarbèni hak cipta", "exif-exifversion": "Vèrsi Exif", "exif-flashpixversion": "Dukungan versi Flashpix", - "exif-colorspace": "Papan werna", + "exif-colorspace": "Lowah warna", "exif-componentsconfiguration": "Teges saben komponèn", "exif-compressedbitsperpixel": "Modhe komprèsi gambar", - "exif-pixelydimension": "Jembaré gambar", - "exif-pixelxdimension": "Dhuwuré gambar", + "exif-pixelxdimension": "Jembaré gambar", + "exif-pixelydimension": "Dhuwuré gambar", "exif-usercomment": "Komentar panganggo", "exif-relatedsoundfile": "Berkas audio sing kagandhèng", - "exif-datetimeoriginal": "Tanggal lan wektu nggawé data", - "exif-datetimedigitized": "Tanggal lan wektu dhigitalisasi", + "exif-datetimeoriginal": "Surya lan tabuh panggawéning data", + "exif-datetimedigitized": "Surya lan tabuh dhigitalisasi", "exif-subsectime": "Subdetik DateTime", "exif-subsectimeoriginal": "Subdetik DateTimeOriginal", "exif-subsectimedigitized": "Subdetik DateTimeDigitized", @@ -2728,7 +2725,6 @@ "version-entrypoints-header-entrypoint": "Tithik lebon", "version-entrypoints-header-url": "URL", "redirect": "Dialihake dening gambar, panganggo, kaca, utawa ID revisi", - "redirect-legend": "Dialihake menyang gambar utawa kaca", "redirect-summary": "Kaca astamiwa iki dialihake menyang gambar (jeneng gambar diwenehi), kaca (ID revisi utama ID kaca diwenehi), utawa kaca panganggo (ID panganggo diwenehi). Cara nganggo: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Nuju", "redirect-lookup": "Golek:", @@ -2740,14 +2736,13 @@ "redirect-not-exists": "Nilai ora ditemokaké", "fileduplicatesearch": "Golèk berkas duplikat", "fileduplicatesearch-summary": "Golèk duplikat berkas adhedhasar biji hash-é.", - "fileduplicatesearch-legend": "Golèk duplikat", "fileduplicatesearch-filename": "Jeneng berkas:", "fileduplicatesearch-submit": "Golèk", "fileduplicatesearch-info": "$1 × $2 piksel
Ukuran berkas: $3
Tipe MIME: $4", "fileduplicatesearch-result-1": "Berkas \"$1\" ora duwé duplikat idèntik.", "fileduplicatesearch-result-n": "Berkas \"$1\" ora ndarbèni {{PLURAL:$2|1 duplikat idèntik|$2 duplikat idèntik}}.", "fileduplicatesearch-noresults": "Ora ana berkas mawa jeneng \"$1\" ditemokaké.", - "specialpages": "Kaca astamiwa", + "specialpages": "Kaca mirunggan", "specialpages-note-top": "Katrangan", "specialpages-note": "* Kaca astamiwa biasa.\n* Kaca astamiwa kawatesan.", "specialpages-group-maintenance": "Lapuran pangopènan", diff --git a/languages/i18n/ka.json b/languages/i18n/ka.json index b76c48676d..f1ba4b2e21 100644 --- a/languages/i18n/ka.json +++ b/languages/i18n/ka.json @@ -2754,8 +2754,8 @@ "exif-colorspace": "ფერთა სივრცე", "exif-componentsconfiguration": "ცალკეულ კომპონენტთა კონფიგურაცია", "exif-compressedbitsperpixel": "სურათის შეკუმშვის რეჟიმი", - "exif-pixelydimension": "სურათის სიგანე", - "exif-pixelxdimension": "სურათის სიმაღლე", + "exif-pixelxdimension": "სურათის სიგანე", + "exif-pixelydimension": "სურათის სიმაღლე", "exif-usercomment": "მომხმარებლის კომენტარი", "exif-relatedsoundfile": "შესაბამისი აუდიო ფაილი", "exif-datetimeoriginal": "გენერირების თარიღი და დრო", @@ -3258,7 +3258,6 @@ "redirect-not-exists": "მნიშვნელობა ვერ მოიძებნა", "fileduplicatesearch": "ერთნაირი ფაილების ძიება", "fileduplicatesearch-summary": "ერთნაირი ფაილების ძიება ჰეშ-კოდის მიხედვით.", - "fileduplicatesearch-legend": "დუბლიკატების ძიება", "fileduplicatesearch-filename": "ფაილის სახელი:", "fileduplicatesearch-submit": "ძიება", "fileduplicatesearch-info": "$1 × $2 პიქსელზე
ფაილის ზომაა: $3
MIME-ტიპი: $4", diff --git a/languages/i18n/kab.json b/languages/i18n/kab.json index c9039a174a..305513c42d 100644 --- a/languages/i18n/kab.json +++ b/languages/i18n/kab.json @@ -2296,8 +2296,8 @@ "exif-colorspace": "Tallunt n tiniskit", "exif-componentsconfiguration": "Anamek n yal isger", "exif-compressedbitsperpixel": "Askar n usekkusem n tugna", - "exif-pixelydimension": "Tehri n tugna", - "exif-pixelxdimension": "Taɣwzi n tugna", + "exif-pixelxdimension": "Tehri n tugna", + "exif-pixelydimension": "Taɣwzi n tugna", "exif-usercomment": "Iwenniten n useqdac", "exif-relatedsoundfile": "Afaylu n eslu yeqqnen", "exif-datetimeoriginal": "Azmez n tuddma tamezwarut", diff --git a/languages/i18n/kk-arab.json b/languages/i18n/kk-arab.json index 65c014cd1d..e69db51060 100644 --- a/languages/i18n/kk-arab.json +++ b/languages/i18n/kk-arab.json @@ -1419,8 +1419,8 @@ "exif-colorspace": "ٴتۇس اياسى", "exif-componentsconfiguration": "ارقايسى قۇراش ٴمانى", "exif-compressedbitsperpixel": "سۋرەت قىسىمداۋ ٴتارتىبى", - "exif-pixelydimension": "سۋرەتتىڭ جارامدى ەنى", - "exif-pixelxdimension": "سۋرەتتىڭ جارامدى بىيىكتىگى", + "exif-pixelxdimension": "سۋرەتتىڭ جارامدى ەنى", + "exif-pixelydimension": "سۋرەتتىڭ جارامدى بىيىكتىگى", "exif-usercomment": "قاتىسۋشىنىڭ ماندەمەلەرى", "exif-relatedsoundfile": "قاتىستى دىبىس فايلى", "exif-datetimeoriginal": "جاسالعان كەزى", diff --git a/languages/i18n/kk-cyrl.json b/languages/i18n/kk-cyrl.json index 0835680c16..2d9d25837d 100644 --- a/languages/i18n/kk-cyrl.json +++ b/languages/i18n/kk-cyrl.json @@ -2560,8 +2560,8 @@ "exif-colorspace": "Түс кеңістігі", "exif-componentsconfiguration": "Әрқайсы құраш мәні", "exif-compressedbitsperpixel": "Сурет қысымдау тәртібі", - "exif-pixelydimension": "Сурет ені", - "exif-pixelxdimension": "Сурет биіктігі", + "exif-pixelxdimension": "Сурет ені", + "exif-pixelydimension": "Сурет биіктігі", "exif-usercomment": "Қатысушы пікірі", "exif-relatedsoundfile": "Қатысты дыбыс файлы", "exif-datetimeoriginal": "Жасалған кезі", @@ -3055,7 +3055,6 @@ "redirect-not-exists": "Мән табылмады", "fileduplicatesearch": "Файл телнұсқаларын іздеу", "fileduplicatesearch-summary": "Файл хеші мағынасы негізінде телнұсқаларын іздеу.", - "fileduplicatesearch-legend": "Телнұсқаны іздеу", "fileduplicatesearch-filename": "Файл атауы:", "fileduplicatesearch-submit": "Іздеу", "fileduplicatesearch-info": "$1 × $2 пиксел (нүкте)
Файл өлшемі: $3
MIME түрі: $4", diff --git a/languages/i18n/kk-latn.json b/languages/i18n/kk-latn.json index b4a3d526f1..011e3ed2f8 100644 --- a/languages/i18n/kk-latn.json +++ b/languages/i18n/kk-latn.json @@ -1420,8 +1420,8 @@ "exif-colorspace": "Tüs ayası", "exif-componentsconfiguration": "Ärqaýsı quraş mäni", "exif-compressedbitsperpixel": "Swret qısımdaw tärtibi", - "exif-pixelydimension": "Swrettiñ jaramdı eni", - "exif-pixelxdimension": "Swrettiñ jaramdı bïiktigi", + "exif-pixelxdimension": "Swrettiñ jaramdı eni", + "exif-pixelydimension": "Swrettiñ jaramdı bïiktigi", "exif-usercomment": "Qatıswşınıñ mändemeleri", "exif-relatedsoundfile": "Qatıstı dıbıs faýlı", "exif-datetimeoriginal": "Jasalğan kezi", diff --git a/languages/i18n/km.json b/languages/i18n/km.json index e298a9834c..4a32fe16a8 100644 --- a/languages/i18n/km.json +++ b/languages/i18n/km.json @@ -2240,8 +2240,8 @@ "exif-flashpixversion": "បានគាំទ្រ កំណែ Flashpix", "exif-colorspace": "លំហពណ៌", "exif-compressedbitsperpixel": "កម្រិតហាប់ នៃរូបភាព (ប៊ិត/ចំណុច)", - "exif-pixelydimension": "ទទឹងរូបភាព", - "exif-pixelxdimension": "កម្ពស់រូបភាព", + "exif-pixelxdimension": "ទទឹងរូបភាព", + "exif-pixelydimension": "កម្ពស់រូបភាព", "exif-usercomment": "យោបល់របស់អ្នកប្រើប្រាស់", "exif-relatedsoundfile": "ឯកសារសំឡេងពាក់ព័ន្ធ", "exif-datetimeoriginal": "ពេលវេលានិងកាលបរិច្ឆេទបង្កើតទិន្នន័យ", diff --git a/languages/i18n/kn.json b/languages/i18n/kn.json index a090015f07..deda8656f5 100644 --- a/languages/i18n/kn.json +++ b/languages/i18n/kn.json @@ -26,7 +26,8 @@ "Pavanaja", "Ananth subray", "MarcoAurelio", - "Macofe" + "Macofe", + "రహ్మానుద్దీన్" ] }, "tog-underline": "ಕೊಂಡಿಗಳ ಕೆಳಗೆ ಗೆರೆ ತೋರಿಸಿ", @@ -390,7 +391,7 @@ "welcomeuser": "ಸುಸ್ವಾಗತ,$1!", "welcomecreation-msg": "ನಿಮ್ಮ ಖಾತೆ ತೆರೆಯಲಾಗಿದೆ.ನಿಮ್ಮ [[Special:Preferences|{{SITENAME}} preferences]]ಬದಲಾಯಿಸಲು ಮರೆಯಬೇಡಿ.", "yourname": "ನಿಮ್ಮ ಬಳಕೆಯ ಹೆಸರು", - "userlogin-yourname": "ಬಳಕೆದಾರ ಹೆಸರು", + "userlogin-yourname": "ಬಳಕೆದಾರರ ಹೆಸರು", "userlogin-yourname-ph": "ನಿಮ್ಮ ಸದಸ್ಯನಾಮ ಬರೆಯಿರಿ", "createacct-another-username-ph": "ಬಳಕೆದಾರರ ಹೆಸರು ಬರೆಯಿರಿ", "yourpassword": "ನಿಮ್ಮ ಪ್ರವೇಶಪದ", @@ -500,7 +501,7 @@ "resetpass-recycled": "ದಯವಿಟ್ಟು ಈಗಿನ ಪ್ರವೇಶಪದದ ಬದಲು ಹೊಸಪ್ರವೇಶಪದ ಬದಲಾಯಿಸಿ ಮರುಚಾಲನೆ ನೀಡಿ.", "resetpass-temp-password": "ತಾತ್ಕಾಲಿಕ ಪ್ರವೇಶಪದ:", "passwordreset": "ಪ್ರವೇಶಪದವನ್ನು ಪುನಃಸ್ಥಾಪಿಸಿ.", - "passwordreset-username": "ಬಳಕೆದಾರ ಹೆಸರು:", + "passwordreset-username": "ಬಳಕೆದಾರರ ಹೆಸರು:", "passwordreset-domain": "ಕ್ಷೇತ್ರ:", "passwordreset-email": "ಇ-ಮೇಲ್ ವಿಳಾಸ:", "passwordreset-emailsentemail": "ಪ್ರವೇಶಪದವನ್ನು ಪುನಃಸ್ಥಾಪಿಸಿದ ಮಿಂಚಂಚೆಯನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ.", @@ -1213,7 +1214,7 @@ "usereditcount": "$1{{PLURAL:$1|ಸಂಪಾದನೆ|ಸಂಪಾದನೆಗಳು}}", "usercreated": "$1 ರಂದು $2 ಸಮಯಕ್ಕೆ {{GENDER:$3|ಸೃಷ್ಟಿಸಿದರು}}", "newpages": "ಹೊಸ ಪುಟಗಳು", - "newpages-username": "ಬಳಕೆದಾರ ಹೆಸರು:", + "newpages-username": "ಬಳಕೆದಾರರ ಹೆಸರು:", "ancientpages": "ಹಳೆಯ ಪುಟಗಳು", "move": "ಸ್ಥಳಾಂತರಿಸಿ", "movethispage": "ಈ ಪುಟವನ್ನು ಸ್ಥಳಾಂತರಿಸಿ", @@ -1280,7 +1281,7 @@ "usermaildisabled": "ಬಳಕೆದಾರರ ಮಿಂಚಂಚೆಯನ್ನು ನಿಷ್ಕ್ತಿಯಗೊಳಿಸಲಾಗಿದೆ", "noemailtitle": "ಯಾವುದೇ ಇ-ಅಂಚೆ ವಿಳಾಸ ಇಲ್ಲ", "noemailtext": "ಈ ಸದಸ್ಯ ಯಾವುದೇ ಇ-ಅಂಚೆ ವಿಳಾಸ ನೀಡಿಲ್ಲ, ಅಥವ ಬೇರೆ ಸದಸ್ಯರಿಂದ ಇ-ಅಂಚೆ ಪಡೆಯಲು ಒಪ್ಪಿಕೊಂಡಿಲ್ಲ.", - "emailusername": "ಬಳಕೆದಾರ ಹೆಸರು:", + "emailusername": "ಬಳಕೆದಾರರ ಹೆಸರು:", "emailusernamesubmit": "ಒಪ್ಪಿಸು", "emailfrom": "ಇಂದ:", "emailto": "ಗೆ:", @@ -1705,8 +1706,8 @@ "exif-artist": "ಕರ್ತೃ", "exif-copyright": "ಕೃತಿಸ್ವಾಮ್ಯತೆಯನ್ನು ಹೊಂದಿರುವವರು", "exif-exifversion": "Exif ಆವೃತ್ತಿ", - "exif-pixelydimension": "ಭಾವಚಿತ್ರದ ಅಗಲ", - "exif-pixelxdimension": "ಭಾವಚಿತ್ರದ ಎತ್ತರ", + "exif-pixelxdimension": "ಭಾವಚಿತ್ರದ ಅಗಲ", + "exif-pixelydimension": "ಭಾವಚಿತ್ರದ ಎತ್ತರ", "exif-usercomment": "ಬಳಕೆದಾರನ ಟಿಪ್ಪಣಿ", "exif-relatedsoundfile": "ಸಂಬಂಧಿತ ಧ್ವನಿ ಫೈಲು", "exif-datetimeoriginal": "ಮಾಹಿತಿ ಸೃಷ್ಟಿಯಾದ ದಿನಾಂಕ ಮತ್ತು ಕಾಲ", @@ -1834,7 +1835,6 @@ "redirect-page": "ಪುಟದ ID", "redirect-file": "ಕಡತದ ಹೆಸರು", "fileduplicatesearch": "ದ್ವಿಪ್ರತಿ ಫೈಲುಗಳಿಗೆ ಹುಡುಕು", - "fileduplicatesearch-legend": "ದ್ವಿಪ್ರತಿಯನ್ನು ಹುಡುಕು", "fileduplicatesearch-filename": "ಫೈಲಿನ ಹೆಸರು:", "fileduplicatesearch-submit": "ಹುಡುಕು", "fileduplicatesearch-info": "$1 × $2 ಚಿತ್ರಬಿಂದು
ಫೈಲಿನ ಗಾತ್ರ: $3
MIME ಪ್ರಕಾರ: $4", diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json index b8106eb2d5..f4ab9e7aed 100644 --- a/languages/i18n/ko.json +++ b/languages/i18n/ko.json @@ -2715,8 +2715,8 @@ "exif-colorspace": "색 공간", "exif-componentsconfiguration": "각 구성 요소의 의미", "exif-compressedbitsperpixel": "그림 압축 방식", - "exif-pixelydimension": "그림 너비", - "exif-pixelxdimension": "그림 높이", + "exif-pixelxdimension": "그림 너비", + "exif-pixelydimension": "그림 높이", "exif-usercomment": "사용자 주", "exif-relatedsoundfile": "관련된 오디오 파일", "exif-datetimeoriginal": "날짜와 시간", @@ -3184,7 +3184,6 @@ "redirect-not-exists": "값을 찾을 수 없습니다", "fileduplicatesearch": "중복된 파일 검색", "fileduplicatesearch-summary": "파일 해시값을 이용해 중복 파일을 검색합니다.", - "fileduplicatesearch-legend": "중복 검색", "fileduplicatesearch-filename": "파일 이름:", "fileduplicatesearch-submit": "검색", "fileduplicatesearch-info": "$1 × $2 픽셀
파일 크기: $3
MIME 유형: $4", diff --git a/languages/i18n/krc.json b/languages/i18n/krc.json index dd0a5b2a90..f8f15e16c9 100644 --- a/languages/i18n/krc.json +++ b/languages/i18n/krc.json @@ -2204,8 +2204,8 @@ "exif-colorspace": "Бояу алам", "exif-componentsconfiguration": "Хар компонентни ангыламы", "exif-compressedbitsperpixel": "Суратны къысдырыу амалы", - "exif-pixelydimension": "Суратны кенглиги", - "exif-pixelxdimension": "Суратны мийиклиги", + "exif-pixelxdimension": "Суратны кенглиги", + "exif-pixelydimension": "Суратны мийиклиги", "exif-usercomment": "Къошакъ комментарий", "exif-relatedsoundfile": "Тауушлу комментарийни файлы", "exif-datetimeoriginal": "Оригинал джаратыу заман", diff --git a/languages/i18n/ksh.json b/languages/i18n/ksh.json index 61c64b7bd5..f7c2f4c872 100644 --- a/languages/i18n/ksh.json +++ b/languages/i18n/ksh.json @@ -2648,8 +2648,8 @@ "exif-colorspace": "Färveroum", "exif-componentsconfiguration": "Bedüggening fun all de enkele Komponente", "exif-compressedbitsperpixel": "Aat fun de Kompreßjohn fun däm Beld", - "exif-pixelydimension": "De jöltije Beld-Breede en Pixelle", - "exif-pixelxdimension": "De jöltije Beld-Hühde en Pixelle", + "exif-pixelxdimension": "De jöltije Beld-Breede en Pixelle", + "exif-pixelydimension": "De jöltije Beld-Hühde en Pixelle", "exif-usercomment": "Aanmerkong fum Aanwender", "exif-relatedsoundfile": "De Tondatei, di do bei jehööt", "exif-datetimeoriginal": "Zickpunk fun de Opzeischnong fun de Date", @@ -3165,7 +3165,6 @@ "redirect-not-exists": "Nit jefonge", "fileduplicatesearch": "Sök noh dubbelte Dateie", "fileduplicatesearch-summary": "Söhhk noh dubbelte Dateie övver dänne iere Häsh-Zahl.", - "fileduplicatesearch-legend": "Sök noh ene dubbelte Dattei", "fileduplicatesearch-filename": "Datteinahme:", "fileduplicatesearch-submit": "Söhke", "fileduplicatesearch-info": "{{PLURAL:$1|Ei Pixel|$1 Pixelle|Nit}} breed × {{PLURAL:$2|Ei Pixel|$2 Pixelle|nix}} huh
Dateiömfang: $3
de MIME-Zoot: $4", diff --git a/languages/i18n/ku-latn.json b/languages/i18n/ku-latn.json index 9499c11a65..514ba4dde6 100644 --- a/languages/i18n/ku-latn.json +++ b/languages/i18n/ku-latn.json @@ -1641,8 +1641,8 @@ "exif-software": "Nivîsbarîya tê bikaranîn", "exif-artist": "Nûser", "exif-exifversion": "Versiyona exif", - "exif-pixelydimension": "Firehiya wêne", - "exif-pixelxdimension": "Dirêjiya wêne", + "exif-pixelxdimension": "Firehiya wêne", + "exif-pixelydimension": "Dirêjiya wêne", "exif-usercomment": "Şîroveyên bikarhêner", "exif-datetimedigitized": "Dema pencekîkirinê", "exif-exposuretime-format": "$1 sanî ($2)", diff --git a/languages/i18n/ky.json b/languages/i18n/ky.json index 8c5fa95418..1b879d53b6 100644 --- a/languages/i18n/ky.json +++ b/languages/i18n/ky.json @@ -1232,8 +1232,8 @@ "exif-imagelength": "Бийиктиги", "exif-imagedescription": "Сүрөт аты", "exif-artist": "Автор", - "exif-pixelydimension": "Сүрөттүн туурасы", - "exif-pixelxdimension": "Сүрөттүн бийиктиги", + "exif-pixelxdimension": "Сүрөттүн туурасы", + "exif-pixelydimension": "Сүрөттүн бийиктиги", "exif-usercomment": "Колдонуучунун комментарийи", "exif-relatedsoundfile": "Байланыштуу аудио-файл", "exif-fnumber": "Диафрагманын саны", diff --git a/languages/i18n/la.json b/languages/i18n/la.json index 8be49c98c9..014a9b872b 100644 --- a/languages/i18n/la.json +++ b/languages/i18n/la.json @@ -26,7 +26,8 @@ "StevenJ81", "Macofe", "Xð", - "Laurentianus" + "Laurentianus", + "Guillermo2149" ] }, "tog-underline": "Versores linea denotandi:", @@ -73,6 +74,8 @@ "underline-default": "Defalta navigatri interretialis", "editfont-style": "Stilus:", "editfont-default": "iuxta navigatrum", + "editfont-sansserif": "Fons Sans-serif", + "editfont-serif": "Fons Serif", "sunday": "dies Solis", "monday": "dies Lunae", "tuesday": "dies Martis", @@ -135,6 +138,8 @@ "october-date": "$1 Octobris", "november-date": "$1 Novembris", "december-date": "$1 Decembris", + "period-am": "AM", + "period-pm": "PM", "pagecategories": "{{PLURAL:$1|Categoria|Categoriae}}", "category_header": "Paginae in categoria \"$1\"", "subcategories": "Subcategoriae", @@ -160,7 +165,7 @@ "morenotlisted": "Hic index mancus est.", "mypage": "Pagina", "mytalk": "Disputatio", - "anontalk": "Disputatio huius IP", + "anontalk": "Disputatio", "navigation": "Navigatio", "and": " et", "qbfind": "Invenire", @@ -272,6 +277,7 @@ "hidetoc": "celare", "collapsible-collapse": "Collabi", "collapsible-expand": "Dilatare", + "confirmable-yes": "Sic", "thisisdeleted": "Videre aut restituere $1?", "viewdeleted": "Visne conspicere $1?", "restorelink": "{{PLURAL:$1|unam redactionem deletam|$1 redactiones deletas}}", @@ -1601,8 +1607,8 @@ "exif-artist": "Auctor", "exif-exifversion": "Redactio modi \"Exif\"", "exif-colorspace": "Spatium colorimetricum", - "exif-pixelydimension": "Amplitudo imaginis", - "exif-pixelxdimension": "Altitudo imaginis", + "exif-pixelxdimension": "Amplitudo imaginis", + "exif-pixelydimension": "Altitudo imaginis", "exif-usercomment": "Adnota usoris", "exif-relatedsoundfile": "Fasciculus soni relatus", "exif-datetimeoriginal": "Dies et tempus creationis", @@ -1812,7 +1818,6 @@ "version-license": "Permissio", "version-software-product": "Productum", "version-software-version": "Versio", - "fileduplicatesearch-legend": "Duplicatum quaerere", "fileduplicatesearch-filename": "Fasciculi nomen:", "fileduplicatesearch-submit": "Quaerere", "fileduplicatesearch-info": "$1 × $2 elementa imaginalia
Magnitudo fasciculi: $3
Typus MIME: $4", diff --git a/languages/i18n/lb.json b/languages/i18n/lb.json index d9ba73afc3..546eb37d97 100644 --- a/languages/i18n/lb.json +++ b/languages/i18n/lb.json @@ -471,7 +471,7 @@ "noemail": "De Benotzer \"$1\" huet keng E-Mail-Adress uginn.", "noemailcreate": "Dir musst eng valabel E-Mail-Adress uginn", "passwordsent": "Een neit Passwuert gouf un déi fir de Benotzer \"$1\" gespäichert E-Mailadress geschéckt.\nMellt Iech w.e.g. domat un, soubal Dir et kritt hutt.", - "blocked-mailpassword": "Déi vun Iech benotzten IP-Adress ass fir d'Ännere vu Säite gespaart. Fir Mëssbrauch ze verhënneren, gouf d'Méiglechkeet fir een neit Passwuert unzefroen och gespaart.", + "blocked-mailpassword": "Är IP-Adress ass fir d'Ännere vu Säite gespaart. Fir Mëssbrauch ze verhënneren, gouf d'Méiglechkeet fir een neit Passwuert vun dëser IP-Adress aus unzefroen och gespaart.", "eauthentsent": "Eng Confirmatiouns-E-Mail gouf un déi Adress geschéckt déi Dir uginn hutt.\n\nIer iergendeng E-Mail vun anere Benotzer op dee Kont geschéckt ka ginn, musst Dir als éischt d'Instructiounen an der Confirmatiouns-E-Mail befollegen, fir ze bestätegen datt de Kont wierklech Ären eegenen ass.", "throttled-mailpassword": "An {{PLURAL:$1|der leschter Stonn|de leschte(n) $1 Stonnen}} eng E-Mail verschéckt fir d'Passwuert zréckzesetzen.\nFir de Mëssbrauch vun dëser Funktioun ze verhënneren kann nëmmen all {{PLURAL:$1|Stonn|$1 Stonnen}} sou eng Mail verschéckt ginn.", "mailerror": "Feeler beim Schécke vun der E-Mail: $1", @@ -1000,7 +1000,7 @@ "gender-unknown": "Wann Dir ernimmt gitt da benotzt d'Software do wou et méiglech ass geschlechtsneutral Wierder", "gender-male": "Hien ännert Wikisäiten", "gender-female": "Si ännert Wikisäiten", - "prefs-help-gender": "Fakultativ:\nD'Software benotzt seng Wäerter fir Iech unzeschwätzen a fir vun Iech vis-a-vis vun Aneren grammatesch ''Gender-korrekt'' ze schwätzen. \n\nDës Informatioun ass ëffentlech.", + "prefs-help-gender": "Fakultativ:\nD'Software benotzt seng Wäerter fir Iech unzerieden a fir vun Iech vis-a-vis vun Anere grammatesch ''Gender-korrekt'' ze sinn. \n\nDës Informatioun ass ëffentlech.", "email": "E-Mail", "prefs-help-realname": "De richtegen Numm ass fakultativ.\nWann en ugi gouf, gëtt e benotzt fir Iech Är Kontributiounen zouzeuerdnen.", "prefs-help-email": "D'E-Mailadress ass fakultativ, awer si gëtt gebraucht fir Iech Äert Passwuert ze mailen, wann Dir et géift vergiessen.", @@ -2089,6 +2089,7 @@ "ipb-unblock": "Spär vun enger IP-Adress oder engem Benotzer ophiewen", "ipb-blocklist": "Kuckt aktuell Spären", "ipb-blocklist-contribs": "Kontributioune vum {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "$1 iwwreg", "unblockip": "Spär vum Benotzer ophiewen", "unblockiptext": "Benotzt dëse Formulaire fir enger IP-Adress oder engem Benotzer seng Spär opzehiewen.", "ipusubmit": "Des Spär ophiewen", @@ -2579,8 +2580,8 @@ "exif-colorspace": "Faarfraum", "exif-componentsconfiguration": "Bedeitung vun eenzelne Komponenten", "exif-compressedbitsperpixel": "Kompriméiert Bite pro Pixel", - "exif-pixelydimension": "Breet vum Bild", - "exif-pixelxdimension": "Héicht vum Bild", + "exif-pixelxdimension": "Breet vum Bild", + "exif-pixelydimension": "Héicht vum Bild", "exif-usercomment": "Bemierkunge vum Benotzer", "exif-relatedsoundfile": "Tounfichier deen dozou gehéiert", "exif-datetimeoriginal": "Erfaassungszäitpunkt", @@ -3023,7 +3024,6 @@ "redirect-not-exists": "Wäert net fonnt", "fileduplicatesearch": "No duebele Fichiere sichen", "fileduplicatesearch-summary": "Sichen no Doublone vu Fichieren op der Basis vun hirem ''Hash-Wäert''.", - "fileduplicatesearch-legend": "No engem Doublon sichen", "fileduplicatesearch-filename": "Numm vum Fichier:", "fileduplicatesearch-submit": "Sichen", "fileduplicatesearch-info": "$1 × $2 Pixel
Gréisst vum Fichier: $3
MIME Typ: $4", @@ -3187,7 +3187,7 @@ "logentry-newusers-autocreate": "De Benotzerkont $1 gouf automatesch {{GENDER:$2|ugeluecht}}", "logentry-protect-protect": "$1 {{GENDER:$2|huet}} d'Säit $3 $4 gespaart", "logentry-protect-protect-cascade": "$1 {{GENDER:$2|huet}} d'Säit $3 $4 gepaart [Kaskadespär]", - "logentry-rights-rights": "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen de Benotzer $3 gehéiert vu(n) $4 op $5 geännert", + "logentry-rights-rights": "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen {{GENDER:$3|d'|de}} $3 gehéiert vu(n) $4 op $5 geännert", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen de Benotzer $3 gehéiert geännert", "logentry-rights-autopromote": "De Benotzer $1 {{GENDER:$2|krut}} d'Benotzerrechter automatesch vu(n) $4 op $5 geännert", "logentry-upload-upload": "$1 huet $3 {{GENDER:$2|eropgelueden}}", diff --git a/languages/i18n/li.json b/languages/i18n/li.json index 46849034da..748c9d0152 100644 --- a/languages/i18n/li.json +++ b/languages/i18n/li.json @@ -2073,8 +2073,8 @@ "exif-colorspace": "Kläörruumde", "exif-componentsconfiguration": "Beteikenis van edere componènt", "exif-compressedbitsperpixel": "Cómpressiemeneer bie dit plaetje", - "exif-pixelydimension": "Aafbeildingsbrèdje", - "exif-pixelxdimension": "Aafbeildingsheugdje", + "exif-pixelxdimension": "Aafbeildingsbrèdje", + "exif-pixelydimension": "Aafbeildingsheugdje", "exif-usercomment": "Opmerkinge", "exif-relatedsoundfile": "Biebeheurendj audiobestandj", "exif-datetimeoriginal": "Datum en momint van verwèkking", diff --git a/languages/i18n/lki.json b/languages/i18n/lki.json index 35c972437d..9c11f7c997 100644 --- a/languages/i18n/lki.json +++ b/languages/i18n/lki.json @@ -2547,8 +2547,8 @@ "exif-colorspace": "فضای رۀنگی", "exif-componentsconfiguration": "معنی هر یک از مؤلفه‌ها", "exif-compressedbitsperpixel": "حالت فشرده‌سازی تصویر", - "exif-pixelydimension": "پهنای تصویر", - "exif-pixelxdimension": "بلندی تصویر", + "exif-pixelxdimension": "پهنای تصویر", + "exif-pixelydimension": "بلندی تصویر", "exif-usercomment": "توضیحات کاربر", "exif-relatedsoundfile": "پروندهٔ صوتی مربوط", "exif-datetimeoriginal": "تاریخ و زمان تولید داده‌ها", diff --git a/languages/i18n/lrc.json b/languages/i18n/lrc.json index 3fd7e2f0a5..ab7b41077c 100644 --- a/languages/i18n/lrc.json +++ b/languages/i18n/lrc.json @@ -2532,8 +2532,8 @@ "exif-colorspace": "رئن ورگه", "exif-componentsconfiguration": "مئنی هر اندوم", "exif-compressedbitsperpixel": "شکل جمع و جیل کردن عسگ", - "exif-pixelydimension": "پئنا عسگ", - "exif-pixelxdimension": "درازا عسگ", + "exif-pixelxdimension": "پئنا عسگ", + "exif-pixelydimension": "درازا عسگ", "exif-usercomment": "ویر و باوریا کارور", "exif-relatedsoundfile": "جانیا دنگ دار مرتوط", "exif-datetimeoriginal": "دمون و وخت راس بیئن دونسمنیا", diff --git a/languages/i18n/lt.json b/languages/i18n/lt.json index c0b33b8778..c2529dd31a 100644 --- a/languages/i18n/lt.json +++ b/languages/i18n/lt.json @@ -2693,8 +2693,8 @@ "exif-colorspace": "Spalvų pristatymas", "exif-componentsconfiguration": "kiekvieno komponento reikšmė", "exif-compressedbitsperpixel": "Paveikslėlio suspaudimo režimas", - "exif-pixelydimension": "Paveikslėlio plotis", - "exif-pixelxdimension": "Vaizdo aukštis", + "exif-pixelxdimension": "Paveikslėlio plotis", + "exif-pixelydimension": "Vaizdo aukštis", "exif-usercomment": "Naudotojo komentarai", "exif-relatedsoundfile": "Susijusi garso byla", "exif-datetimeoriginal": "Duomenų generavimo data ir laikas", diff --git a/languages/i18n/lus.json b/languages/i18n/lus.json index 1a5e27ba02..309ccd4910 100644 --- a/languages/i18n/lus.json +++ b/languages/i18n/lus.json @@ -1392,8 +1392,8 @@ "exif-colorspace": "Rawng hmun", "exif-componentsconfiguration": "Péngtinte awmzia", "exif-compressedbitsperpixel": "Lem sàwrzìmphung", - "exif-pixelydimension": "Lem zauzáwng", - "exif-pixelxdimension": "Lem sànzáwng", + "exif-pixelxdimension": "Lem zauzáwng", + "exif-pixelydimension": "Lem sànzáwng", "exif-usercomment": "Hmangtu kamchhuak", "exif-relatedsoundfile": "Ritaksa laichinte", "exif-datetimeoriginal": "Hriattirna siamchhuah hun leh ni", diff --git a/languages/i18n/lv.json b/languages/i18n/lv.json index c6ee2aab4a..008168f0a7 100644 --- a/languages/i18n/lv.json +++ b/languages/i18n/lv.json @@ -2098,8 +2098,8 @@ "exif-colorspace": "Krāsu telpa", "exif-componentsconfiguration": "Katras sastāvdaļas nozīme", "exif-compressedbitsperpixel": "Attēla kompresijas pakāpe", - "exif-pixelydimension": "Attēla platums", - "exif-pixelxdimension": "Attēla augstums", + "exif-pixelxdimension": "Attēla platums", + "exif-pixelydimension": "Attēla augstums", "exif-usercomment": "Lietotāja komentāri", "exif-relatedsoundfile": "Saistītais skaņas fails", "exif-datetimeoriginal": "Izveidošanas datums un laiks", @@ -2437,7 +2437,6 @@ "redirect-not-exists": "Vērtība nav atrasta", "fileduplicatesearch": "Meklēt failu kopijas", "fileduplicatesearch-summary": "Meklē dublējošos failus, izmantojot uz jaucējfunkcijas vērtības.", - "fileduplicatesearch-legend": "Meklēt kopiju", "fileduplicatesearch-filename": "Faila vārds:", "fileduplicatesearch-submit": "Meklēt", "fileduplicatesearch-info": "$1 × $2 pikseļi
Faila izmērs: $3
MIME tips: $4", diff --git a/languages/i18n/mai.json b/languages/i18n/mai.json index dbcd5282e9..d4bd82c4bb 100644 --- a/languages/i18n/mai.json +++ b/languages/i18n/mai.json @@ -2486,8 +2486,8 @@ "exif-colorspace": "रंगक स्थान", "exif-componentsconfiguration": "सभ घटकक अर्थ", "exif-compressedbitsperpixel": "चित्र संकुचन अवस्था", - "exif-pixelydimension": "तस्वीरक चौडाई", - "exif-pixelxdimension": "तस्वीरक ऊँचाई", + "exif-pixelxdimension": "तस्वीरक चौडाई", + "exif-pixelydimension": "तस्वीरक ऊँचाई", "exif-usercomment": "सदस्यक टिप्पणी", "exif-relatedsoundfile": "संबंधित ध्वनि फ़ाईल", "exif-datetimeoriginal": "डाटा बनाबैक तारीख आ समय", diff --git a/languages/i18n/mdf.json b/languages/i18n/mdf.json index e5169da87c..e6d20bd914 100644 --- a/languages/i18n/mdf.json +++ b/languages/i18n/mdf.json @@ -1714,8 +1714,8 @@ "exif-colorspace": "Тюсонь ёткась", "exif-componentsconfiguration": "Эрь компонентонь асуц", "exif-compressedbitsperpixel": "Архтофксонь компрезийамась", - "exif-pixelydimension": "Кондясти архтофксонь келец", - "exif-pixelxdimension": "Кондясти архтофксонь серец", + "exif-pixelxdimension": "Кондясти архтофксонь келец", + "exif-pixelydimension": "Кондясти архтофксонь серец", "exif-usercomment": "Тиить тяштьксонза", "exif-relatedsoundfile": "Сотф аудио файлсь", "exif-datetimeoriginal": "Шинь тиевомать шись ди пингсь", diff --git a/languages/i18n/mg.json b/languages/i18n/mg.json index 7468ee40b2..f1b3a37cd6 100644 --- a/languages/i18n/mg.json +++ b/languages/i18n/mg.json @@ -2509,8 +2509,8 @@ "exif-colorspace": "Valan-doko", "exif-componentsconfiguration": "Dikan'ny mpanorina tsirairay", "exif-compressedbitsperpixel": "Fomba famintinan-tsary", - "exif-pixelydimension": "Haavon-tsary", - "exif-pixelxdimension": "Halala-tsary", + "exif-pixelxdimension": "Haavon-tsary", + "exif-pixelydimension": "Halala-tsary", "exif-usercomment": "Diniky ny mpikambana", "exif-relatedsoundfile": "Rakitra audio miaraka", "exif-datetimeoriginal": "Daty fangalana niaviana", diff --git a/languages/i18n/min.json b/languages/i18n/min.json index f55d3782eb..68716bcdf2 100644 --- a/languages/i18n/min.json +++ b/languages/i18n/min.json @@ -1736,8 +1736,8 @@ "exif-colorspace": "Ruang warna", "exif-componentsconfiguration": "Arti tiok komponen", "exif-compressedbitsperpixel": "Mode kompresi gamba", - "exif-pixelydimension": "Leba gamba", - "exif-pixelxdimension": "Tinggi gamba", + "exif-pixelxdimension": "Leba gamba", + "exif-pixelydimension": "Tinggi gamba", "exif-usercomment": "Komen pangguno", "exif-relatedsoundfile": "Berkas audio nan bahubuangan", "namespacesall": "sadonyo", diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json index 1d68d63684..8675f12260 100644 --- a/languages/i18n/mk.json +++ b/languages/i18n/mk.json @@ -1552,7 +1552,7 @@ "shared-repo": "заедничко складиште", "shared-repo-name-wikimediacommons": "Ризницата", "filepage.css": "/* Тука поставените каскадни стилски страници (CSS) се вклучени во описната страница на податотеката, како и на клиентските викија */", - "upload-disallowed-here": "Нажалост, не можете да презапишете врз сликава.", + "upload-disallowed-here": "За жал, не можете да презапишете врз сликава.", "filerevert": "Врати $1", "filerevert-legend": "Врати податотека", "filerevert-intro": "Ја враќате '''[[Media:$1|$1]]''' на [$4 верзијата од $3, $2].", @@ -2385,11 +2385,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|Увезена е една преработка|Увезени се $1 преработки}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|Увезена е една преработка|Увезени се $1 преработки}} од $2", "javascripttest": "Проба на JavaScript", - "javascripttest-pagetext-noframework": "Оваа страница е резервирана за вршење на проби со JavaScript.", - "javascripttest-pagetext-unknownframework": "Непозната рамка „$1“.", "javascripttest-pagetext-unknownaction": "Непознато дејство „$1“.", - "javascripttest-pagetext-frameworks": "Изберете една од следниве рамки: $1", - "javascripttest-pagetext-skins": "Одберете со кое руво да ја направите пробата:", "javascripttest-qunit-intro": "Вид. [$1 документација на испробувањето] на mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Вашата}} корисничка страница", "tooltip-pt-anonuserpage": "Корисничка страница за IP-адресата од која уредувате", @@ -2694,8 +2690,8 @@ "exif-colorspace": "Боен простор", "exif-componentsconfiguration": "Значење на секој боен дел", "exif-compressedbitsperpixel": "Режим на набивање на сликата", - "exif-pixelydimension": "Ширина на сликата", - "exif-pixelxdimension": "Висина на сликата", + "exif-pixelxdimension": "Ширина на сликата", + "exif-pixelydimension": "Висина на сликата", "exif-usercomment": "Кориснички коментари", "exif-relatedsoundfile": "Поврзана аудиоснимка", "exif-datetimeoriginal": "Датум и време на сликање", @@ -3244,7 +3240,6 @@ "version-libraries-description": "Опис", "version-libraries-authors": "Автори", "redirect": "Пренасочување по податотеки, корисник или назнака на преработка", - "redirect-legend": "Пренасочување кон податотека или страница", "redirect-summary": "Оваа службена страница пренасочува кон податотека (се задава името), страница (се задава назнаката на преработката или страницата) или корисничка странца (се задава бројчената назнака на корисникот). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] или [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Дај", "redirect-lookup": "Пребарај:", @@ -3257,7 +3252,6 @@ "redirect-not-exists": "Вредноста не е најдена", "fileduplicatesearch": "Барање на дуплирани податотеки", "fileduplicatesearch-summary": "Пребарување на дуплирани податотеки по тарабни вредности.", - "fileduplicatesearch-legend": "Барање на дупликат", "fileduplicatesearch-filename": "Податотека:", "fileduplicatesearch-submit": "Барај", "fileduplicatesearch-info": "$1 × $2 пиксели
Големина на податотеката: $3
MIME-тип: $4", diff --git a/languages/i18n/ml.json b/languages/i18n/ml.json index 0f9afb900d..62832676ed 100644 --- a/languages/i18n/ml.json +++ b/languages/i18n/ml.json @@ -2647,8 +2647,8 @@ "exif-colorspace": "കളർ സ്പേസ്", "exif-componentsconfiguration": "ഓരോ ഘടകത്തിന്റേയും അർത്ഥം", "exif-compressedbitsperpixel": "ചിത്രം ചുരുക്കുവാനുപയോഗിച്ചിരിക്കുന്ന മാർഗ്ഗം", - "exif-pixelydimension": "ചിത്രത്തിന്റെ വീതി", - "exif-pixelxdimension": "ചിത്രത്തിന്റെ ഉയരം", + "exif-pixelxdimension": "ചിത്രത്തിന്റെ വീതി", + "exif-pixelydimension": "ചിത്രത്തിന്റെ ഉയരം", "exif-usercomment": "ഉപയോക്താവിന്റെ കുറിപ്പുകൾ", "exif-relatedsoundfile": "ഇതുമായി ബന്ധമുള്ള ഓഡിയോ പ്രമാണം", "exif-datetimeoriginal": "ഡാറ്റ സൃഷ്ടിക്കപ്പെട്ട തീയതിയും സമയവും", diff --git a/languages/i18n/mn.json b/languages/i18n/mn.json index 89929c0c18..abe9087cb6 100644 --- a/languages/i18n/mn.json +++ b/languages/i18n/mn.json @@ -2259,8 +2259,8 @@ "exif-colorspace": "Өнгөний завсар", "exif-componentsconfiguration": "Бүх бүрэлдэхүүн хэсгүүдийн утга", "exif-compressedbitsperpixel": "Зургийн файлыг шахах арга", - "exif-pixelydimension": "Зургийн өргөн", - "exif-pixelxdimension": "Зургийн өндөр", + "exif-pixelxdimension": "Зургийн өргөн", + "exif-pixelydimension": "Зургийн өндөр", "exif-usercomment": "Хэрэглэгчдийн тэмдэглэл", "exif-relatedsoundfile": "Холбоотой дуун файл", "exif-datetimeoriginal": "Мэдээллийг үүсгэсэн огноо ба цаг", diff --git a/languages/i18n/mr.json b/languages/i18n/mr.json index 2ba3513789..998817a518 100644 --- a/languages/i18n/mr.json +++ b/languages/i18n/mr.json @@ -2619,8 +2619,8 @@ "exif-colorspace": "रंगांकन (कलर स्पेस)", "exif-componentsconfiguration": "प्रत्येक घटकाचा अर्थ", "exif-compressedbitsperpixel": "चित्र आकुंचन स्थिती", - "exif-pixelydimension": "आकृतीची सुयोग्य रूंदी", - "exif-pixelxdimension": "आकृतीची सुयोग्य उंची", + "exif-pixelxdimension": "आकृतीची सुयोग्य रूंदी", + "exif-pixelydimension": "आकृतीची सुयोग्य उंची", "exif-usercomment": "सदस्य प्रतिक्रीया", "exif-relatedsoundfile": "संबधीत ध्वनी संचिका", "exif-datetimeoriginal": "विदा निर्मितीची तारीख आणि वेळ", diff --git a/languages/i18n/ms.json b/languages/i18n/ms.json index d29a55d5f6..ec5995384f 100644 --- a/languages/i18n/ms.json +++ b/languages/i18n/ms.json @@ -2581,8 +2581,8 @@ "exif-colorspace": "Ruang warna", "exif-componentsconfiguration": "Maksud setiap komponen", "exif-compressedbitsperpixel": "Mod pemampatan imej", - "exif-pixelydimension": "Lebar imej", - "exif-pixelxdimension": "Tinggi imej", + "exif-pixelxdimension": "Lebar imej", + "exif-pixelydimension": "Tinggi imej", "exif-usercomment": "Komen pengguna", "exif-relatedsoundfile": "Fail audio berkaitan", "exif-datetimeoriginal": "Tarikh dan waktu penjanaan data", diff --git a/languages/i18n/mt.json b/languages/i18n/mt.json index f09f565b16..8e3780b1e2 100644 --- a/languages/i18n/mt.json +++ b/languages/i18n/mt.json @@ -2378,8 +2378,8 @@ "exif-colorspace": "Spazju tal-kuluri", "exif-componentsconfiguration": "Tfissira dwar kull komponent", "exif-compressedbitsperpixel": "Għamla tal-kompressjoni tal-istampa", - "exif-pixelydimension": "Wisa' tal-istampa", - "exif-pixelxdimension": "Għoli tal-istama", + "exif-pixelxdimension": "Wisa' tal-istampa", + "exif-pixelydimension": "Għoli tal-istama", "exif-usercomment": "Noti tal-utent", "exif-relatedsoundfile": "Fajl relatat mal-ismiegħ", "exif-datetimeoriginal": "Data u ħin tal-ħolqien tad-data", diff --git a/languages/i18n/my.json b/languages/i18n/my.json index 3e8e28fa46..f94f79cf86 100644 --- a/languages/i18n/my.json +++ b/languages/i18n/my.json @@ -1515,8 +1515,8 @@ "exif-copyright": "မူပိုင်ခွင့်ပိုင်ရှင်", "exif-exifversion": "Exif ဗားရှင်း", "exif-colorspace": "အရောင်နေရာ", - "exif-pixelydimension": "ပုံအကျယ်", - "exif-pixelxdimension": "ပုံအမြင့်", + "exif-pixelxdimension": "ပုံအကျယ်", + "exif-pixelydimension": "ပုံအမြင့်", "exif-usercomment": "အသုံးပြုသူ မှတ်ချက်များ", "exif-relatedsoundfile": "ဆက်နွယ်သော အသံဖိုင်", "exif-datetimeoriginal": "ဒေတာဖန်တီးခဲ့သော နေ့စွဲနှင့် အချိန်", @@ -1596,7 +1596,6 @@ "version-software-product": "ထုတ်ကုန်", "version-software-version": "ဗားရှင်း", "fileduplicatesearch": "နှစ်ခုထပ်နေသောဖိုင်များကို ရှာရန်", - "fileduplicatesearch-legend": "နှစ်ခုထပ်နေသည်ကို ရှာရန်", "fileduplicatesearch-filename": "ဖိုင်အမည် -", "fileduplicatesearch-submit": "ရှာဖွေရန်", "specialpages": "အ​ထူး ​စာ​မျက်​နှာ​များ", diff --git a/languages/i18n/myv.json b/languages/i18n/myv.json index a1a9bb125d..0ad88057d1 100644 --- a/languages/i18n/myv.json +++ b/languages/i18n/myv.json @@ -1412,8 +1412,8 @@ "exif-artist": "Теицязо", "exif-copyright": "Копия теемань видечинь кирдицясь", "exif-colorspace": "Тюс ютко", - "exif-pixelydimension": "Артовксонть келезэ", - "exif-pixelxdimension": "Артовксонть сэрезэ", + "exif-pixelxdimension": "Артовксонть келезэ", + "exif-pixelydimension": "Артовксонть сэрезэ", "exif-usercomment": "Теицянь мельть-арьсемат", "exif-exposuretime": "Валдомтомань (Экспозициянь) шка", "exif-fnumber": "Диафрагмань числась", diff --git a/languages/i18n/nap.json b/languages/i18n/nap.json index 8e6132e05f..e9a257c828 100644 --- a/languages/i18n/nap.json +++ b/languages/i18n/nap.json @@ -2682,8 +2682,8 @@ "exif-colorspace": "Spazio d' 'e culore", "exif-componentsconfiguration": "Significato d'ogne componente", "exif-compressedbitsperpixel": "Modo 'e compressione 'e l'immaggene", - "exif-pixelydimension": "Larghezza 'e l'immaggene", - "exif-pixelxdimension": "Autezza 'e l'immaggene", + "exif-pixelxdimension": "Larghezza 'e l'immaggene", + "exif-pixelydimension": "Autezza 'e l'immaggene", "exif-usercomment": "Note 'e ll'utente", "exif-relatedsoundfile": "File audio cullegato", "exif-datetimeoriginal": "Data e ora d' 'a criazione d' 'e date", @@ -3136,7 +3136,6 @@ "redirect-not-exists": "Valore nun accucchiato", "fileduplicatesearch": "Ascìa 'e file duprecate", "fileduplicatesearch-summary": "Circa pe' file duprecate cu bbase 'o valore hash.", - "fileduplicatesearch-legend": "Circa pe' nu duprecato", "fileduplicatesearch-filename": "Nomme d' 'o file", "fileduplicatesearch-submit": "Truova", "fileduplicatesearch-info": "$1 × $2 pixel, dimenzione d' 'o file: $3
tipo MIME: $4", diff --git a/languages/i18n/nb.json b/languages/i18n/nb.json index 073fe88908..1073491b58 100644 --- a/languages/i18n/nb.json +++ b/languages/i18n/nb.json @@ -2684,8 +2684,8 @@ "exif-colorspace": "Fargerom", "exif-componentsconfiguration": "Betydning av hver komponent", "exif-compressedbitsperpixel": "Bildekompresjonsmodus", - "exif-pixelydimension": "Bildebredde", - "exif-pixelxdimension": "Bildehøyde", + "exif-pixelxdimension": "Bildebredde", + "exif-pixelydimension": "Bildehøyde", "exif-usercomment": "Brukerkommentarer", "exif-relatedsoundfile": "Relatert lydfil", "exif-datetimeoriginal": "Dato og tid for datagenerering", diff --git a/languages/i18n/nds-nl.json b/languages/i18n/nds-nl.json index 49ccbf8db7..f53d44c7a7 100644 --- a/languages/i18n/nds-nl.json +++ b/languages/i18n/nds-nl.json @@ -2326,8 +2326,8 @@ "exif-colorspace": "Kleurruumte", "exif-componentsconfiguration": "Betekenisse van elk compenent", "exif-compressedbitsperpixel": "Beeldkompressiemethode", - "exif-pixelydimension": "Aofbeeldingsbreedte", - "exif-pixelxdimension": "Aofbeeldingsheugte", + "exif-pixelxdimension": "Aofbeeldingsbreedte", + "exif-pixelydimension": "Aofbeeldingsheugte", "exif-usercomment": "Opmarkingen", "exif-relatedsoundfile": "Biebeheurend geluudsbestaand", "exif-datetimeoriginal": "Tiedstip van datagenerasie", @@ -2750,7 +2750,6 @@ "redirect-not-exists": "Weerde niet evunnen", "fileduplicatesearch": "Dubbele bestaanden zeuken", "fileduplicatesearch-summary": "Dubbele bestaanden zeuken op baosis van de hashweerde.", - "fileduplicatesearch-legend": "Dubbele bestaanden zeuken", "fileduplicatesearch-filename": "Bestaandsnaam:", "fileduplicatesearch-submit": "Zeuken", "fileduplicatesearch-info": "$1 × $2 beeldpunten
Bestaandsgrootte: $3
MIME-type: $4", diff --git a/languages/i18n/nds.json b/languages/i18n/nds.json index f83ab1405d..f21090f416 100644 --- a/languages/i18n/nds.json +++ b/languages/i18n/nds.json @@ -1813,8 +1813,8 @@ "exif-colorspace": "Farvruum", "exif-componentsconfiguration": "Bedüden vun elk Kumponent", "exif-compressedbitsperpixel": "Komprimeerte Bits je Pixel", - "exif-pixelydimension": "Gellen Bildbreed", - "exif-pixelxdimension": "Gellen Bildhööchd", + "exif-pixelxdimension": "Gellen Bildbreed", + "exif-pixelydimension": "Gellen Bildhööchd", "exif-usercomment": "Brukerkommentar", "exif-relatedsoundfile": "Tohörige Toondatei", "exif-datetimeoriginal": "Tiet vun de Opnahm", diff --git a/languages/i18n/ne.json b/languages/i18n/ne.json index ac0d25ce61..4d9877f130 100644 --- a/languages/i18n/ne.json +++ b/languages/i18n/ne.json @@ -2542,8 +2542,8 @@ "exif-colorspace": "वर्ण स्थान", "exif-componentsconfiguration": "प्रत्येक घटकको अर्थ", "exif-compressedbitsperpixel": "चित्र सम्पीडन मोड", - "exif-pixelydimension": "चित्रको चौड़ाई", - "exif-pixelxdimension": "चित्रको उचाई", + "exif-pixelxdimension": "चित्रको चौड़ाई", + "exif-pixelydimension": "चित्रको उचाई", "exif-usercomment": "प्रयोगकर्ताका टिप्पणखरु:", "exif-relatedsoundfile": "सम्बन्धित अडियो फाइल", "exif-datetimeoriginal": "डेटा सञ्चालनको मिति र समय", diff --git a/languages/i18n/new.json b/languages/i18n/new.json index 95b66b25d0..6dccabf006 100644 --- a/languages/i18n/new.json +++ b/languages/i18n/new.json @@ -339,8 +339,8 @@ "exif-software": "छ्यलातःगु सफ्तवेयर", "exif-artist": "च्वमि", "exif-copyright": "लेखाधिकार थुवा", - "exif-pixelydimension": "किपा ब्याः", - "exif-pixelxdimension": "किपा जाः", + "exif-pixelxdimension": "किपा ब्याः", + "exif-pixelydimension": "किपा जाः", "exif-dc-date": "तिथि", "namespacesall": "सकल", "autosumm-new": "न्हुगु पौ: $1", diff --git a/languages/i18n/nl.json b/languages/i18n/nl.json index acc2cd7012..5d892166c9 100644 --- a/languages/i18n/nl.json +++ b/languages/i18n/nl.json @@ -2769,8 +2769,8 @@ "exif-colorspace": "Kleurruimte", "exif-componentsconfiguration": "Betekenis van elke component", "exif-compressedbitsperpixel": "Beeldcompressiemethode", - "exif-pixelydimension": "Afbeeldingsbreedte", - "exif-pixelxdimension": "Afbeeldingshoogte", + "exif-pixelxdimension": "Afbeeldingsbreedte", + "exif-pixelydimension": "Afbeeldingshoogte", "exif-usercomment": "Opmerkingen", "exif-relatedsoundfile": "Bijbehorend audiobestand", "exif-datetimeoriginal": "Tijdstip gegevensaanmaak", diff --git a/languages/i18n/nn.json b/languages/i18n/nn.json index e050eb9608..66d205d2c9 100644 --- a/languages/i18n/nn.json +++ b/languages/i18n/nn.json @@ -2376,8 +2376,8 @@ "exif-colorspace": "Fargerom", "exif-componentsconfiguration": "Komponentanalyse", "exif-compressedbitsperpixel": "Komprimerte bits pr. pixel", - "exif-pixelydimension": "Biletbreidd", - "exif-pixelxdimension": "Bilethøgd", + "exif-pixelxdimension": "Biletbreidd", + "exif-pixelydimension": "Bilethøgd", "exif-usercomment": "Brukarkommentarar", "exif-relatedsoundfile": "Tilknytt lydfil", "exif-datetimeoriginal": "Dato og tid laga", diff --git a/languages/i18n/oc.json b/languages/i18n/oc.json index 3a68073ecc..41bbf8bd49 100644 --- a/languages/i18n/oc.json +++ b/languages/i18n/oc.json @@ -2430,8 +2430,8 @@ "exif-colorspace": "Espaci colorimetric", "exif-componentsconfiguration": "Significacion de cada compausanta", "exif-compressedbitsperpixel": "Mòde de compression de l’imatge", - "exif-pixelydimension": "Largor de l’imatge", - "exif-pixelxdimension": "Nautor de l’imatge", + "exif-pixelxdimension": "Largor de l’imatge", + "exif-pixelydimension": "Nautor de l’imatge", "exif-usercomment": "Comentaris de l'utilizaire", "exif-relatedsoundfile": "Fichièr àudio associat", "exif-datetimeoriginal": "Data e ora de la generacion de donadas", diff --git a/languages/i18n/or.json b/languages/i18n/or.json index 221e87c47c..bb3707a77a 100644 --- a/languages/i18n/or.json +++ b/languages/i18n/or.json @@ -2445,8 +2445,8 @@ "exif-colorspace": "ରଙ୍ଗ ଫାଙ୍କା ଜାଗା", "exif-componentsconfiguration": "ପ୍ରତିତି ଉପାଦାନର ଅର୍ଥ", "exif-compressedbitsperpixel": "ଛବି ସଙ୍କୋଚନ ଅବସ୍ଥା", - "exif-pixelydimension": "ଛବି ଓସାର", - "exif-pixelxdimension": "ଛବି ଉଚ୍ଚତା", + "exif-pixelxdimension": "ଛବି ଓସାର", + "exif-pixelydimension": "ଛବି ଉଚ୍ଚତା", "exif-usercomment": "ସଭ୍ୟ ମତାମତ", "exif-relatedsoundfile": "ସମ୍ବନ୍ଧିତ ଶବ୍ଦ ଫାଇଲ", "exif-datetimeoriginal": "ତଥ୍ୟ ତିଆରିହେବାର ତାରିଖ ଓ ସମୟ", diff --git a/languages/i18n/pa.json b/languages/i18n/pa.json index 407e9b9f44..a160c580c2 100644 --- a/languages/i18n/pa.json +++ b/languages/i18n/pa.json @@ -1920,8 +1920,8 @@ "exif-copyright": "ਕਾਪੀਰਾਈਟ ਟਾਇਟਲ", "exif-exifversion": "ਐਗਜ਼ਿਫ਼ ਦਾ ਰੂਪ", "exif-colorspace": "ਰੰਗ ਸਪੇਸ", - "exif-pixelydimension": "ਤਸਵੀਰ ਦੀ ਚੌੜਾਈ", - "exif-pixelxdimension": "ਤਸਵੀਰ ਦੀ ਲੰਬਾਈ", + "exif-pixelxdimension": "ਤਸਵੀਰ ਦੀ ਚੌੜਾਈ", + "exif-pixelydimension": "ਤਸਵੀਰ ਦੀ ਲੰਬਾਈ", "exif-usercomment": "ਵਰਤੋਂਕਾਰ ਦੀਆਂ ਟਿੱਪਣੀਆਂ", "exif-relatedsoundfile": "ਮਿਲਦੀ-ਜੁਲਦੀ ਆਡੀਓ ਫ਼ਾਈਲ", "exif-datetimeoriginal": "ਡਾਟਾ ਦੇ ਬਣਨ ਦੀ ਮਿਤੀ ਅਤੇ ਸਮਾਂ", diff --git a/languages/i18n/pam.json b/languages/i18n/pam.json index 7060c0bbcd..c9bf45ccd5 100644 --- a/languages/i18n/pam.json +++ b/languages/i18n/pam.json @@ -1454,8 +1454,8 @@ "exif-colorspace": "Pirinan kule (color space)", "exif-componentsconfiguration": "Kabaldugan ning balang dake (component)", "exif-compressedbitsperpixel": "Paralan/ayus pamamitpit larawan (image compression mode)", - "exif-pixelydimension": "Ustung lapad ning larawan", - "exif-pixelxdimension": "Ustung katas ning larawan", + "exif-pixelxdimension": "Ustung lapad ning larawan", + "exif-pixelydimension": "Ustung katas ning larawan", "exif-usercomment": "Komentu da ring talagamit", "exif-relatedsoundfile": "Makaugneng simpan a katni (audio file)", "exif-datetimeoriginal": "Petsa ampong oras ning pamaglalang king data (data generation)", diff --git a/languages/i18n/pl.json b/languages/i18n/pl.json index 5b22de33dc..4c791e9ed6 100644 --- a/languages/i18n/pl.json +++ b/languages/i18n/pl.json @@ -2743,8 +2743,8 @@ "exif-colorspace": "Przestrzeń kolorów", "exif-componentsconfiguration": "Znaczenie składowych", "exif-compressedbitsperpixel": "Skompresowanych bitów na piksel", - "exif-pixelydimension": "Prawidłowa szerokość obrazu", - "exif-pixelxdimension": "Prawidłowa wysokość obrazu", + "exif-pixelxdimension": "Prawidłowa szerokość obrazu", + "exif-pixelydimension": "Prawidłowa wysokość obrazu", "exif-usercomment": "Komentarz użytkownika", "exif-relatedsoundfile": "Powiązany plik audio", "exif-datetimeoriginal": "Data i czas utworzenia oryginału", @@ -3239,7 +3239,6 @@ "redirect-not-exists": "Nie znaleziono wartości", "fileduplicatesearch": "Wyszukiwanie duplikatów pliku", "fileduplicatesearch-summary": "Wyszukiwanie duplikatów pliku na podstawie wartości funkcji skrótu.", - "fileduplicatesearch-legend": "Szukaj duplikatów pliku", "fileduplicatesearch-filename": "Nazwa pliku:", "fileduplicatesearch-submit": "Szukaj", "fileduplicatesearch-info": "$1 × $2 pikseli
Wielkość pliku: $3
Typ MIME: $4", diff --git a/languages/i18n/pms.json b/languages/i18n/pms.json index 305806f391..c76a11b475 100644 --- a/languages/i18n/pms.json +++ b/languages/i18n/pms.json @@ -2494,8 +2494,8 @@ "exif-colorspace": "Spassi dij color", "exif-componentsconfiguration": "Significà ëd minca component", "exif-compressedbitsperpixel": "Sistema ëd compression dle figure", - "exif-pixelydimension": "Larghëssa dla figura", - "exif-pixelxdimension": "Autëssa dla figura", + "exif-pixelxdimension": "Larghëssa dla figura", + "exif-pixelydimension": "Autëssa dla figura", "exif-usercomment": "Nòte lìbere", "exif-relatedsoundfile": "Archivi sonor colegà", "exif-datetimeoriginal": "Data e ora dla generassion dij dat", diff --git a/languages/i18n/pnb.json b/languages/i18n/pnb.json index 57c0b4290b..20dfd63044 100644 --- a/languages/i18n/pnb.json +++ b/languages/i18n/pnb.json @@ -2065,8 +2065,8 @@ "exif-colorspace": "رنگ سپیس", "exif-componentsconfiguration": "ہر انگ دا مطلب", "exif-compressedbitsperpixel": "امیج کمپریشن موڈ", - "exif-pixelydimension": "امیج چوڑائی", - "exif-pixelxdimension": "امیج اچائی", + "exif-pixelxdimension": "امیج چوڑائی", + "exif-pixelydimension": "امیج اچائی", "exif-usercomment": "ورتن آلے دی صلاع", "exif-relatedsoundfile": "رلدی آڈیو فائل", "exif-datetimeoriginal": "تریخ تے ویلہ ڈیٹا جنریشن دا", diff --git a/languages/i18n/prg.json b/languages/i18n/prg.json index 3a71cc6ee6..cb2a061053 100644 --- a/languages/i18n/prg.json +++ b/languages/i18n/prg.json @@ -1665,8 +1665,8 @@ "exif-colorspace": "Bārwis plattibi", "exif-componentsconfiguration": "Kōmpunēntin zentlisnā", "exif-compressedbitsperpixel": "Bildes kōmpresiōnis wīds", - "exif-pixelydimension": "Tikrōmiskan bildes plattu", - "exif-pixelxdimension": "Tikrōmiskan bildes aūktan", + "exif-pixelxdimension": "Tikrōmiskan bildes plattu", + "exif-pixelydimension": "Tikrōmiskan bildes aūktan", "exif-usercomment": "Tērpautajas kumentārai", "exif-relatedsoundfile": "Sēitan audiō zūrbrukis", "exif-datetimeoriginal": "Ōriginālas teīksnas dātan be kerdā", diff --git a/languages/i18n/ps.json b/languages/i18n/ps.json index 228c0916c5..228af6cd58 100644 --- a/languages/i18n/ps.json +++ b/languages/i18n/ps.json @@ -2070,8 +2070,8 @@ "exif-copyright": "د رښتو خاوند", "exif-exifversion": "Exif بڼه", "exif-colorspace": "رنگ تشيال", - "exif-pixelydimension": "د انځور سور", - "exif-pixelxdimension": "د انځور جگوالی", + "exif-pixelxdimension": "د انځور سور", + "exif-pixelydimension": "د انځور جگوالی", "exif-usercomment": "د کارن تبصرې", "exif-relatedsoundfile": "اړونده غږيزه دوتنه", "exif-datetimeoriginal": "د اومتوک د جوړېدنې وخت او نېټه", diff --git a/languages/i18n/pt-br.json b/languages/i18n/pt-br.json index f2e1eb554c..456e1112ac 100644 --- a/languages/i18n/pt-br.json +++ b/languages/i18n/pt-br.json @@ -2721,8 +2721,8 @@ "exif-colorspace": "Espaço de cor", "exif-componentsconfiguration": "Significado de cada componente", "exif-compressedbitsperpixel": "Modo de compressão de imagem", - "exif-pixelydimension": "Largura da imagem", - "exif-pixelxdimension": "Altura da imagem", + "exif-pixelxdimension": "Largura da imagem", + "exif-pixelydimension": "Altura da imagem", "exif-usercomment": "Comentários de usuários", "exif-relatedsoundfile": "arquivo áudio relacionado", "exif-datetimeoriginal": "Data e hora de geração de dados", @@ -3176,7 +3176,6 @@ "redirect-not-exists": "Valor não encontrado", "fileduplicatesearch": "Procurar por arquivos duplicados", "fileduplicatesearch-summary": "Procure por arquivos duplicados tendo por base seu valor \"hash\".", - "fileduplicatesearch-legend": "Procurar por duplicatas", "fileduplicatesearch-filename": "Nome do arquivo:", "fileduplicatesearch-submit": "Pesquisa", "fileduplicatesearch-info": "$1 × $2 pixels
Tamanho: $3
tipo MIME: $4", diff --git a/languages/i18n/pt.json b/languages/i18n/pt.json index c592b28ff8..eb05ee9212 100644 --- a/languages/i18n/pt.json +++ b/languages/i18n/pt.json @@ -1885,7 +1885,7 @@ "listgrants-summary": "Esta é uma lista de atribuições com os respetivos acessos às permissões de utilizador. Os utilizadores podem autorizar aplicações a utilizar suas contas, mas com permissões limitadas baseadas nas atribuições dadas pelos utilizadores a cada aplicação. No entanto, uma aplicação agindo em nome de um utilizador não pode utilizar permissões que o utilizador não possui.\nPode haver [[{{MediaWiki:Listgrouprights-helppage}}|informação adicional]] sobre permissões individuais.", "listgrants-grant": "Atribuição", "listgrants-rights": "Direitos", - "trackingcategories": "Categorias de rastreamento", + "trackingcategories": "Categorias de monitorização", "trackingcategories-summary": "Esta página lista as categorias monitoradas que foram geradas automaticamente pelo software MediaWiki. Os seus nomes podem ser alterados ao editar sua mensagem correspondente no domínio {{ns:8}}.", "trackingcategories-msg": "Categoria monitorada", "trackingcategories-name": "Nome da mensagem", @@ -2712,8 +2712,8 @@ "exif-colorspace": "Espaço de cores", "exif-componentsconfiguration": "Significado de cada componente", "exif-compressedbitsperpixel": "Modo de compressão da imagem", - "exif-pixelydimension": "Largura válida da imagem", - "exif-pixelxdimension": "Altura válida da imagem", + "exif-pixelxdimension": "Largura válida da imagem", + "exif-pixelydimension": "Altura válida da imagem", "exif-usercomment": "Comentários de utilizadores", "exif-relatedsoundfile": "Ficheiro áudio relacionado", "exif-datetimeoriginal": "Data e hora de geração de dados", @@ -3166,7 +3166,6 @@ "redirect-not-exists": "Valor não encontrado", "fileduplicatesearch": "Ficheiros duplicados", "fileduplicatesearch-summary": "Procure ficheiros duplicados tendo por base o seu resumo criptográfico.", - "fileduplicatesearch-legend": "Procurar duplicados", "fileduplicatesearch-filename": "Ficheiro:", "fileduplicatesearch-submit": "Pesquisar", "fileduplicatesearch-info": "$1 × $2 pixels
Tamanho: $3
tipo MIME: $4", diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json index d0851bc80c..71dc9b7bcd 100644 --- a/languages/i18n/qqq.json +++ b/languages/i18n/qqq.json @@ -3149,8 +3149,8 @@ "exif-colorspace": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe colorspace of the photo. This tells the computer how to make the colours in the photo be more true to the original photo. Typical values for this are sRGB or uncalibrated. This only gives information on colour information given in the exif-colorspace property. However, colour information is often stored elsewhere in the photo.\n\nSee also:\n* {{msg-mw|Exif-colorspace}}\n* {{msg-mw|Exif-colorspace-1|optional}}\n* {{msg-mw|Exif-colorspace-65535}}", "exif-componentsconfiguration": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThis contains how the information in the picture is stored. This is most commonly Y, Cr, Cb to specify luma, red, blue. RGB is also possible to specify Red, Green, Blue.\n{{Related|Exif-componentsconfiguration}}", "exif-compressedbitsperpixel": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].", - "exif-pixelydimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image width}}", - "exif-pixelxdimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image height}}", + "exif-pixelxdimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image width}}", + "exif-pixelydimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image height}}", "exif-usercomment": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nComments by user. Sometimes used like ImageDescription when the ImageDescription contained non-ascii characters. (Technically ImageDescription is supposed to contain ascii characters. In practice utf-8 is used in ImageDescription, so this field isn't used too much.)", "exif-relatedsoundfile": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nSome cameras offer the option to record an audio \"memo\" for the photo they just took. If the user did that, the name of the file is labelled with this message.", "exif-datetimeoriginal": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe date and time when the original image data was generated. For example if it was a painting from 1773, scanned in to a computer in 2007, the datetimeoriginal would be 1773 and {{msg-mw|exif-datetimedigitized}} would have the 2007 date.", @@ -3516,6 +3516,10 @@ "confirmemail_body_set": "This is used in a confirmation email sent when a contact email address is set.\n\nSee also [[MediaWiki:Confirmemail body changed]].\n\nParameters:\n* $1 - the IP address of the user that set the email address\n* $2 - the name of the user\n* $3 - a URL to [[Special:ConfirmEmail]]\n* $4 - a time and date (duplicated by $6 and $7)\n* $5 - a URL to [[Special:InvalidateEmail]]\n* $6 - (Optional) a date\n* $7 - (Optional) a time\n{{Related|Confirmemail body}}", "confirmemail_invalidated": "This is the text of the special page [[Special:InvalidateEmail|InvalidateEmail]] (with the title in {{msg-mw|Invalidateemail}}) where user goes if he chooses the cancel e-mail confirmation link from the confirmation e-mail.", "invalidateemail": "This is the '''name of the special page''' where user goes if he chooses the cancel e-mail confirmation link from the confirmation e-mail.", + "notificationemail_subject_changed": "Subject of the email sent on the previously registered email address notifying them about the change in the registered email address.", + "notificationemail_subject_removed": "Subject of the email sent on the previously registered email address notifying them about the removal of the registered email address.", + "notificationemail_body_changed": "Body of the email sent on the previously registered email address notifying them about the change in the registered email address.", + "notificationemail_body_removed": "Body of the email sent on the previously registered email address notifying them about the removal of the registered email address.", "scarytranscludedisabled": "Shown when scary transclusion is disabled.", "scarytranscludefailed": "Shown when the HTTP request for the template failed. Identical to {{msg-mw|Scarytranscludefailed-httpstatus}}, but does not show the HTTP error which was received. This will not be parsed as wikitext and will appear as is. Parameters:\n* $1 - URL which points to interwiki template", "scarytranscludefailed-httpstatus": "Identical to {{msg-mw|Scarytranscludefailed}}, but shows the HTTP error which was received. This will not be parsed as wikitext and will appear as is. Parameters:\n* $1 - URL which points to interwiki template\n* $2 - HTTP status, integer (other than 200)", diff --git a/languages/i18n/qu.json b/languages/i18n/qu.json index 134328ab1f..66dd0081f3 100644 --- a/languages/i18n/qu.json +++ b/languages/i18n/qu.json @@ -2339,8 +2339,8 @@ "exif-colorspace": "Llimphi suyu", "exif-componentsconfiguration": "Sapa ñawpariqninpa sut'in", "exif-compressedbitsperpixel": "Rikchap mat'isqa kaynin laya", - "exif-pixelydimension": "Rikchap suni kaynin", - "exif-pixelxdimension": "Rikchap hanaq kaynin", + "exif-pixelxdimension": "Rikchap suni kaynin", + "exif-pixelydimension": "Rikchap hanaq kaynin", "exif-usercomment": "Llamk'achiqpa willayninkuna", "exif-relatedsoundfile": "Ninachiq ruqyay willañiqi", "exif-datetimeoriginal": "Willakunap kamaynin p'unchaw, pacha", diff --git a/languages/i18n/rm.json b/languages/i18n/rm.json index be52e1538c..4b379a4655 100644 --- a/languages/i18n/rm.json +++ b/languages/i18n/rm.json @@ -2180,8 +2180,8 @@ "exif-colorspace": "Spazi da colurs", "exif-componentsconfiguration": "Significaziun da las singulas cumponentas", "exif-compressedbitsperpixel": "Modus da cumprimer", - "exif-pixelydimension": "Ladezza dal maletg", - "exif-pixelxdimension": "Autezza dal maletg", + "exif-pixelxdimension": "Ladezza dal maletg", + "exif-pixelydimension": "Autezza dal maletg", "exif-usercomment": "Commentari da l'utilisader", "exif-relatedsoundfile": "Datoteca d'audio appartegnenta", "exif-datetimeoriginal": "Data e temp da la generaziun", diff --git a/languages/i18n/ro.json b/languages/i18n/ro.json index 19358ce208..7390ae8025 100644 --- a/languages/i18n/ro.json +++ b/languages/i18n/ro.json @@ -2649,8 +2649,8 @@ "exif-colorspace": "Spațiu de culoare", "exif-componentsconfiguration": "Semnificația fiecărei componente", "exif-compressedbitsperpixel": "Mod de comprimare a imaginii", - "exif-pixelydimension": "Lățimea imaginii", - "exif-pixelxdimension": "Înălțimea imaginii", + "exif-pixelxdimension": "Lățimea imaginii", + "exif-pixelydimension": "Înălțimea imaginii", "exif-usercomment": "Comentariile utilizatorilor", "exif-relatedsoundfile": "Fișierul audio asemănător", "exif-datetimeoriginal": "Data și ora producerii imaginii", diff --git a/languages/i18n/roa-tara.json b/languages/i18n/roa-tara.json index 5e2559e19a..c575d07989 100644 --- a/languages/i18n/roa-tara.json +++ b/languages/i18n/roa-tara.json @@ -2577,8 +2577,8 @@ "exif-colorspace": "Spazie d'u culore", "exif-componentsconfiguration": "Significate de ogne combonende", "exif-compressedbitsperpixel": "Mode de combressione de l'immaggine", - "exif-pixelydimension": "Larghezze de l'immaggine", - "exif-pixelxdimension": "Altezze de l'immaggine", + "exif-pixelxdimension": "Larghezze de l'immaggine", + "exif-pixelydimension": "Altezze de l'immaggine", "exif-usercomment": "Commende de l'utende", "exif-relatedsoundfile": "File audio collegate", "exif-datetimeoriginal": "Date e ore d'a generazione de le date", diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json index 4e92f872e6..a689b5e986 100644 --- a/languages/i18n/ru.json +++ b/languages/i18n/ru.json @@ -2787,8 +2787,8 @@ "exif-colorspace": "Цветовое пространство", "exif-componentsconfiguration": "Конфигурация цветовых компонентов", "exif-compressedbitsperpixel": "Глубина цвета после сжатия", - "exif-pixelydimension": "Ширина изображения", - "exif-pixelxdimension": "Высота изображения", + "exif-pixelxdimension": "Ширина изображения", + "exif-pixelydimension": "Высота изображения", "exif-usercomment": "Дополнительный комментарий", "exif-relatedsoundfile": "Файл звукового комментария", "exif-datetimeoriginal": "Оригинальные дата и время", @@ -3312,7 +3312,6 @@ "redirect-not-exists": "Значение не найдено", "fileduplicatesearch": "Поиск одинаковых файлов", "fileduplicatesearch-summary": "Поиск одинаковых файлов по хэш-коду.", - "fileduplicatesearch-legend": "Поиск дубликатов", "fileduplicatesearch-filename": "Имя файла:", "fileduplicatesearch-submit": "Найти", "fileduplicatesearch-info": "$1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}
Размер файла: $3
MIME-тип: $4", diff --git a/languages/i18n/rue.json b/languages/i18n/rue.json index 1c1c7cee1d..a0ea840f4b 100644 --- a/languages/i18n/rue.json +++ b/languages/i18n/rue.json @@ -2298,8 +2298,8 @@ "exif-colorspace": "Фаребный простор", "exif-componentsconfiguration": "Конфіґурація компонентів фарбы", "exif-compressedbitsperpixel": "Компрімачный режім", - "exif-pixelydimension": "Шырка образчіка", - "exif-pixelxdimension": "Вышка образчіка", + "exif-pixelxdimension": "Шырка образчіка", + "exif-pixelydimension": "Вышка образчіка", "exif-usercomment": "Додатковый коментарь", "exif-relatedsoundfile": "Звязаный звуковый файл", "exif-datetimeoriginal": "Оріґіналный датум і час", diff --git a/languages/i18n/sa.json b/languages/i18n/sa.json index 9eae5d1f87..da4e81f7a0 100644 --- a/languages/i18n/sa.json +++ b/languages/i18n/sa.json @@ -2477,8 +2477,8 @@ "exif-colorspace": "वर्णावकाशः", "exif-componentsconfiguration": "प्रत्येकं भागस्य अर्थः ।", "exif-compressedbitsperpixel": "चित्रसङ्कोचविधानम् ।", - "exif-pixelydimension": "चित्रपार्थवम् (width)", - "exif-pixelxdimension": "चित्रैन्नत्यम् ।", + "exif-pixelxdimension": "चित्रपार्थवम् (width)", + "exif-pixelydimension": "चित्रैन्नत्यम् ।", "exif-usercomment": "योजकाभिप्रायः ।", "exif-relatedsoundfile": "सम्बद्धश्रवणसञ्चिका ।", "exif-datetimeoriginal": "दत्तांशसर्जनस्य दिनाङ्कः समयः च ।", diff --git a/languages/i18n/sah.json b/languages/i18n/sah.json index 0e2e3f27f2..9fd097f2c6 100644 --- a/languages/i18n/sah.json +++ b/languages/i18n/sah.json @@ -2675,8 +2675,8 @@ "exif-colorspace": "Өҥ куйаара (пространство, space)", "exif-componentsconfiguration": "Хас биирдии компонент суолтата", "exif-compressedbitsperpixel": "Ойууну хам тутуу ньымата", - "exif-pixelydimension": "Ойуу кэтитэ", - "exif-pixelxdimension": "Ойуу үрдүгэ", + "exif-pixelxdimension": "Ойуу кэтитэ", + "exif-pixelydimension": "Ойуу үрдүгэ", "exif-usercomment": "Кыттааччы хос быһаарыыта", "exif-relatedsoundfile": "Аудио-билэҕэ сыһыаннаах", "exif-datetimeoriginal": "Оҥоһуллубут кэмэ", diff --git a/languages/i18n/scn.json b/languages/i18n/scn.json index e7363e1928..fae4d99613 100644 --- a/languages/i18n/scn.json +++ b/languages/i18n/scn.json @@ -2510,8 +2510,8 @@ "exif-colorspace": "Spazziu dî culuri", "exif-componentsconfiguration": "Significatu d'ognuna cumpunenti", "exif-compressedbitsperpixel": "Mudalitati di cumprissioni dâ mmàggini", - "exif-pixelydimension": "Larghizza dâ mmàggini", - "exif-pixelxdimension": "Autizza dâ mmàggini", + "exif-pixelxdimension": "Larghizza dâ mmàggini", + "exif-pixelydimension": "Autizza dâ mmàggini", "exif-usercomment": "Noti di l'utenti", "exif-relatedsoundfile": "File audiu culligatu", "exif-datetimeoriginal": "Data e ura di criazzioni dî dati", diff --git a/languages/i18n/sco.json b/languages/i18n/sco.json index bcba1a5490..b22fa63411 100644 --- a/languages/i18n/sco.json +++ b/languages/i18n/sco.json @@ -2424,8 +2424,8 @@ "exif-colorspace": "Colour space", "exif-componentsconfiguration": "Meanin o ilka component", "exif-compressedbitsperpixel": "Eemage compression mode", - "exif-pixelydimension": "Eemage width", - "exif-pixelxdimension": "Eemage heicht", + "exif-pixelxdimension": "Eemage width", + "exif-pixelydimension": "Eemage heicht", "exif-usercomment": "Uiser comments", "exif-relatedsoundfile": "Relatit audío file", "exif-datetimeoriginal": "Date n time o data generation", diff --git a/languages/i18n/sd.json b/languages/i18n/sd.json index c6e6e6ddf2..23ddbe9b1a 100644 --- a/languages/i18n/sd.json +++ b/languages/i18n/sd.json @@ -47,6 +47,7 @@ "underline-always": "هميشہ", "underline-never": "ڪڏهن بہ نہ", "editfont-style": "ايراضي جو فونٽ اسٽائيل سنواريو:", + "editfont-serif": "سيرِف اِنڊو", "sunday": "آچر", "monday": "سومر", "tuesday": "اڱارو", @@ -429,6 +430,11 @@ "resetpass_submit": "ڳجھو لفظ طَي ڪريو ۽ لاگ اِن ٿيو", "changepassword-success": "توهان جو ڳجھو لفظ ڪاميابيءَ سان بدلايو ويو!", "changepassword-throttled": "توهان تازو ئي لاگ اِن ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.", + "botpasswords-label-create": "سرجيو", + "botpasswords-label-update": "تجديد", + "botpasswords-label-cancel": "رد", + "botpasswords-label-delete": "ڊاهيو", + "botpasswords-label-resetpassword": "ڳجھو لفظ نئين سِر مقرر ڪريو", "resetpass_forbidden": "ڳجھو لفظ بدلائي نہ ٿو سگھجي.", "resetpass-no-info": "هيءُ صفحو پڙهڻ لاءِ لاگ اِن ٿيڻ ضروري آهي.", "resetpass-submit-loggedin": "ڳجھو لفظ بدلايو", @@ -446,6 +452,7 @@ "passwordreset-emaildisabled": "هن وڪيءَ تي برق‌ٽپال واريون خصوصيتون غير فعال بڻايون ويون آهن.", "passwordreset-username": "يُوزرنانءُ:", "passwordreset-domain": "ميدان:", + "passwordreset-capture": "برق ٽپال ڏسڻ چاهيندا؟", "passwordreset-email": "برق ٽپال پتو:", "passwordreset-emailtitle": "{{SITENAME}} واري کاتي جا تفصيل", "passwordreset-emailelement": "يُوزر نانءُ: \n$1\n\nعارضي ڳجھو لفظ:\n$2", @@ -530,6 +537,8 @@ "hiddencategories": "هيءُ صفحو {{PLURAL:$1|1 لڪل زمري|$1 لڪل زمرن}}: جو رڪن آهي:", "nocreatetext": "{{SITENAME}} نوان صفحا سرجڻ جي روڪَ ڪئي آهي.\nتوهان اڳي ئي موجود صفحن کي سنواري سگھو ٿا، يا [[Special:UserLogin|لاگ اِن ٿي يا نئون کاتو کولي سگھو ٿا]].", "nocreate-loggedin": "توهان کي نوان صفحا سرجڻ جي اجازت حاصل ڪانهي.", + "sectioneditnotsupported-title": "سيڪشن جي سنوار ممڪن نہ آهي", + "sectioneditnotsupported-text": "هن صفحي تي سيڪشن کي سنوارڻ ممڪن نہ آهي.", "permissionserrors": "اجازتنامي جي چُڪَ", "permissionserrorstext": "هيٺين {{PLURAL:$1|سبب|سببن}} ڪري، توهان کي اهو ڪرڻ جي اجازت حاصل ڪانهي.", "permissionserrorstext-withaction": "هيٺين {{PLURAL:$1|سبب|سببن}} ڪري، توهان کي $2 جي اجازت ڪانهي.", @@ -710,6 +719,7 @@ "timezonelegend": "اوقاتي زون:", "localtime": "مقامي وقت:", "timezoneuseserverdefault": "وڪي عدم پيروي استعمال ڪريو ($1)", + "timezoneuseoffset": "ٻيو (ڄاڻايو)", "servertime": "سَروَر پٽاندر وقت:", "guesstimezone": "جھانگُوءَ مان ڀريو", "timezoneregion-africa": "آفريڪا", @@ -796,6 +806,7 @@ "right-move-categorypages": "زمراتي صفحا چوريو", "right-movefile": "فائيل چوريو", "right-upload": "فائيل چاڙهيو", + "right-reupload": "موجوده فائيلن مٿان", "right-upload_by_url": "ڪنهن يُوآرايل تان فائيل چاڙهيو", "right-writeapi": "اي پر آءِ لکڻ جو استعمال", "right-delete": "صفحا ڊاهيو", @@ -807,6 +818,7 @@ "right-viewmywatchlist": "پنهنجي ٽيٽ لسٽ ڏسو", "right-editmyoptions": "پنهنجون ترجيحات سنواريو", "right-import": "ٻين وڪيز کان صفحا درآمديو", + "right-importupload": "ڪو فائيل چاڙهي صفحا درآمديو", "right-mergehistory": "صفحن جي سوانح سنواريو", "right-userrights": "سڀ يوزر حق ترميم ڪريو", "right-userrights-interwiki": "هن وڪي جي يوزرس جا حق ترميم ڪريو", @@ -815,6 +827,18 @@ "right-sendemail": "ٻين يوزرس ڏانهن ايميل موڪليو", "right-passwordreset": "ڳجھو لفظ مقرري برق ٽپالون ڏسو", "right-managechangetags": "اعدادخاني ۾ [[Special:Tags|ٽيگس]] سرجيو ۽ ڊاهيو.", + "grant-group-email": "برق ٽپال اماڻيو", + "grant-blockusers": "يُوزرس کي بندشيو ۽ اڻبندشيو", + "grant-createaccount": "نئون کاتو کوليو", + "grant-editmywatchlist": "پنهنجي ٽيٽ فهرست سنواريو", + "grant-editprotected": "تحفظيل صفحا سنواريو", + "grant-rollback": "صفحن ۾ ڪيل تبديليون واپس ورايو", + "grant-sendemail": "ٻين يوزرس ڏانهن ايميل موڪليو", + "grant-uploadeditmovefile": "فائيل چاڙهيو، مَٽايو، ۽ ڊاهيو", + "grant-uploadfile": "نئون فائيل چاڙهيو", + "grant-basic": "بنيادي حقَ", + "grant-viewdeleted": "ڊَٺَلَ فائيلَ ۽ صفحا ڏسو", + "grant-viewmywatchlist": "پنهنجي ٽيٽ فهرست ڏسو", "newuserlogpage": "يوزر کاتن جو لاگ", "rightslog": "يُوزر حق لاگ", "action-read": "هي صفحو پڙهو", @@ -896,7 +920,9 @@ "newpageletter": "ن", "boteditletter": "گ", "number_of_watching_users_pageview": "[$1، {{PLURAL:$1|يُوزر|يُوزرس}} کي ٽيٽيندي]", + "rc_categories_any": "چونڊيلن مان ڪو بہ", "rc-change-size-new": "$1 {{PLURAL:$1|بائيٽ|بائيٽس}} تبديليءَ کان پوءِ", + "newsectionsummary": "/* $1 */ نئون سيڪشن", "rc-enhanced-expand": "تفصيل ڏيکاريو", "rc-enhanced-hide": "تفصيل لڪايو", "recentchangeslinked": "لاڳاپيل تبديليون", @@ -916,6 +942,9 @@ "fileuploadsummary": "خلاصو:", "filereuploadsummary": "فائيل تبديليون:", "filesource": "ذريعو:", + "ignorewarnings": "وارنڱس کي نظرانداز ڪريو", + "badfilename": "فائيل‌نانءُ بدلائي \"$1\" رکيو ويو آهي.", + "empty-file": "توهان جو جمع ڪرايل فائيل خالي آهي.", "filename-tooshort": "فائيل نانءَُ هيڪاندو ننڍو آهي.", "filetype-banned": "فائيل جو هيءُ قسم بندشيل آهي.", "verification-error": "هن فائيل جي تصديق ٿي نہ سگھي.", @@ -944,6 +973,7 @@ "upload-options": "چاڙھ جا چارا", "watchthisupload": "هيءُ فائيل ٽيٽيو", "upload-file-error": "اندروني چُڪَ", + "upload-http-error": "ايڇ ٽي ٽي پي جي چُڪَ ٿي آهي: $1", "upload-dialog-title": "فائيل چاڙهيو", "upload-dialog-button-cancel": "رد", "upload-dialog-button-done": "ٿي ويو", @@ -964,10 +994,14 @@ "backend-fail-move": "فائيل \"$1\" کي \"$2\" ڏانهن چوري نه سگھيو.", "backend-fail-opentemp": "عارضي فائيئ کولي نه سگھيو.", "backend-fail-read": "فائيل \"$1\" کي پڙهي نه سگھيو.", + "uploadstash-thumbnail": "ٽِڪِلي ڏسو", + "img-auth-accessdenied": "دسترس کان جواب", "license-header": "لائيسنسڪاري", + "nolicense": "چونڊ اڻموجود", "listfiles-delete": "ڊاهيو", "imgfile": "فائيل", "listfiles": "فائيل فهرست", + "listfiles_thumb": "ٽِڪِلِي", "listfiles_date": "تاريخ", "listfiles_name": "نالو", "listfiles_user": "يُوزر", @@ -987,6 +1021,7 @@ "filehist-datetime": "تاريخ/وقت", "filehist-thumb": "آڱوٺي ننهن", "filehist-thumbtext": "$1 جي نظرثاني لاءِ تصويري نشان", + "filehist-nothumb": "ٽِڪِلِي اڻموجود", "filehist-user": "يُوزر", "filehist-dimensions": "ماپَ", "filehist-filesize": "فائيل سائيز", @@ -1015,7 +1050,9 @@ "unusedtemplates": "اڻ استعماليل سانچا", "unusedtemplateswlh": "ٻيا ڳنڍڻا", "randompage": "بلاترتيب صفحو", + "randomincategory": "زمري مان ڪو بلاترتيب صفحو", "randomincategory-category": "زمرو:", + "randomincategory-legend": "زمري مان ڪو بلاترتيب صفحو", "randomincategory-submit": "هلو", "randomredirect": "بلا ترتيب چورڻو", "statistics": "انگ اکر", @@ -1030,6 +1067,7 @@ "statistics-users": "کاتيدار [[Special:ListUsers|يُوزرس]]", "statistics-users-active": "سرگرم يُوزرس", "statistics-users-active-desc": "اهي يُوزرس جن پوين {{PLURAL:$1|ڏينهن|$1 ڏينهن}} ۾ ڪا سرگرمي ڏيکاري آهي.", + "pageswithprop-prop": "خصوصيت نانءُ:", "pageswithprop-submit": "ھلو", "doubleredirects": "ٻٽا چورڻا", "double-redirect-fixed-move": "[[$1]] چورجي چڪو آهي. ان کي خودڪاراً تجديديو ويو ۽ هاڻي اهو [[$2]] ڏانهن وٺي وڃي ٿو.", @@ -1073,7 +1111,9 @@ "deadendpages": "اڻ ڳنڍيندڙ صفحا", "protectedpages": "تحفظيل صفحا", "protectedpages-noredirect": "چورڻا لڪايو", + "protectedpages-timestamp": "اوقاتي مُهُرَ", "protectedpages-page": "صفحو", + "protectedpages-params": "تحفظ جا نميپيما", "protectedpages-reason": "سبب", "protectedpages-submit": "صفحا ڏيکاريو", "protectedpages-unknown-timestamp": "اڻڄاتل", @@ -1082,28 +1122,42 @@ "protectedtitles-submit": "عنوان ڏيکاريو", "listusers": "يُوزر فهرست", "newpages": "نوان صفحا", + "newpages-submit": "ڏيکاريو", "newpages-username": "يُوزرنانءُ:", "ancientpages": "قديم ترين صفحا", "move": "چوريو", "movethispage": "هيءُ صفحو چوريو", "notargettitle": "بنان هدف", + "nopagetitle": "اهدافي صفحو اڻموجود", "pager-older-n": "{{PLURAL:$1|پراڻو 1|پراڻا $1}}", + "apisandbox-retry": "ٻيهر ڪوشش ڪريو", + "apisandbox-helpurls": "امدادي ڳنڍڻا", + "apisandbox-examples": "مثال", + "apisandbox-dynamic-parameters-add-label": "نيمپيما شامل ڪريو", + "apisandbox-dynamic-parameters-add-placeholder": "نيمپيما نانءُ", + "apisandbox-results": "نتيجا", "booksources": "ڪتابي وسيلا", "booksources-search-legend": "ڪتابي ذريعن جي ڳولا ڪريو", "booksources-search": "ڳوليو", "specialloguserlabel": "پيش ڪندڙ:", "speciallogtitlelabel": "نشانو (عنوان يا {{ns:user}}:يا يوزنانءُ يور جي لاءِ):", "log": "لاگس", + "logeventslist-submit": "ڏيکاريو", "all-logs-page": "سڀ عوامي لاگس", + "checkbox-none": "ڪو بہ نہ", + "checkbox-invert": "ابتيو", "allpages": "سڀ صفحا", "nextpage": "اڳيون صفحو ($1)", "prevpage": "پويون صفحو ($1)", "allpagesfrom": "ھتان شروع ٿيندڙ صفحا نمايو", + "allpagesto": "ان تي ختم ٿيندڙ صفحا نُمايو:", "allarticles": "سمورا مضمون", "allinnamespace": "سمورا صفحا ($1 نانءُپولار)", "allpagessubmit": "ھلو", "allpagesprefix": "صفحا نمايو بمع اڳياڙي:", + "allpagesbadtitle": "صفحي جو گھربل عنوان ڪار ڪونهي، يا خالي آهي، يا وري غيردرست طريقي سان ڳنڍيل بين‌الزباني يا بين‌الوڪي عنوان آهي. \nان ۾ هڪ يا هڪ کان وڌيڪ اهڙا اکر موجود ٿي سگھن ٿا، جيڪي عنوان ۾ استعمال ڪري نہ ٿا سگھجن.", "categories": "زمرا", + "categories-submit": "ڏيکاريو", "deletedcontributions": "يُوزر جون ڊاٺل ڀاڱيداريون", "deletedcontributions-title": "يُوزر جون ڊاٺل ڀاڱيداريون", "sp-deletedcontributions-contribs": "ڀاڱيداريون", @@ -1124,6 +1178,7 @@ "listgrouprights-addgroup-all": "سڀ گروپَ شامل ڪريو", "listgrouprights-removegroup-all": "سڀ گروپ هٽايو", "listgrouprights-namespaceprotection-namespace": "نانءُ پولار:", + "listgrants-rights": "حق", "trackingcategories-name": "پيغام جو نالو", "trackingcategories-nodesc": "ڪا به تشريح موجود نه آهي.", "trackingcategories-disabled": "زمرو ناقابلِ ڪار بڻايل آهي.", @@ -1147,6 +1202,7 @@ "mywatchlist": "ٽيٽ فهرست", "addwatch": "ٽيٽ فهرست ۾ شامل ڪريو", "addedwatchtext": "صفحو\"[[:$1]]\" ان جي بحث وارو صفحو اوهان جي [[Special:Watchlist|ٽيٽ فهرست]] ۾ شامل ڪيو ويو آهي.", + "removewatch": "ٽيٽ فهرست مان خارج ڪريو", "removedwatchtext": "صفحو بعنوان \"[[:$1]]\" توهان جي [[Special:Watchlist|ٽيٽ فهرست]] مان هٽي چڪو آهي.", "removedwatchtext-short": "\"صفحو بعنوان \"$1\" توهان جي ٽيٽ فهرست مان هٽي چڪو آهي.\"", "watch": "ٽيٽيو", @@ -1473,8 +1529,8 @@ "exif-artist": "ليکڪ", "exif-copyright": "حق ۽ واسطا رکندڙ", "exif-colorspace": "رنگ پولار", - "exif-pixelydimension": "عڪس جي ويڪر", - "exif-pixelxdimension": "عڪس جي اوچائي", + "exif-pixelxdimension": "عڪس جي ويڪر", + "exif-pixelydimension": "عڪس جي اوچائي", "exif-usercomment": "يُوزر جا تاثرات", "exif-relatedsoundfile": "لاڳاپيل آوازي فائيل", "exif-datetimeoriginal": "اعداد جي جڙڻ جي تاريخ ۽ وقت", diff --git a/languages/i18n/sdh.json b/languages/i18n/sdh.json index 015e408d06..cf0dcd399d 100644 --- a/languages/i18n/sdh.json +++ b/languages/i18n/sdh.json @@ -557,7 +557,7 @@ "metadata-help": "ئەی پەڕگە زانیاری فرەێگ لەتێیە، ک گەھا دۊردۊن (camera) یا ئسکەنێر (scanner) خستۊە سەری. ئەگەر پەڕگەگە لە حاڵەتە سەرەتاییەگەیەو دەسکاری کریاۊد، گاھەس بڕێگ لە وردەکاریەیل، زانیارەگان وێنە گووڕیاێەگە وە تەواوی نیشان نەدەن.", "metadata-fields": "کاڵگەگان (fields) میتادەیتاێ وێنە ک لە ئەی پەیامە وەڕزارەو کریانە، کاتێگ جەدوەل میتادەیتا کووکریاێ بوود لە پەڕەی وێنە نیشان دەریەن.\nکاڵگەگان تر لە حاڵەتی بنەڕەتی شاریاێن.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude", "exif-imagedescription": "ناونیشان وێنە", - "exif-pixelxdimension": "بەرزی وێنە", + "exif-pixelydimension": "بەرزی وێنە", "exif-flash": "فلەش", "exif-keywords": "کلیل‌وشەیل", "exif-writer": "نۊسەر", diff --git a/languages/i18n/ses.json b/languages/i18n/ses.json index 2c92aaba96..5b6fe2603c 100644 --- a/languages/i18n/ses.json +++ b/languages/i18n/ses.json @@ -2488,8 +2488,8 @@ "exif-colorspace": "Noone farru", "exif-componentsconfiguration": "Jere-ize foo kul maana", "exif-compressedbitsperpixel": "Bii kankamandiyan yaayi", - "exif-pixelydimension": "Bii hayri", - "exif-pixelxdimension": "Bii kayyan", + "exif-pixelxdimension": "Bii hayri", + "exif-pixelydimension": "Bii kayyan", "exif-usercomment": "Goykaw daarawey", "exif-relatedsoundfile": "Jinde tuku hangante", "exif-datetimeoriginal": "Han nda waati bayhaya teeyan se", diff --git a/languages/i18n/sgs.json b/languages/i18n/sgs.json index ec538b1411..9ecd27b755 100644 --- a/languages/i18n/sgs.json +++ b/languages/i18n/sgs.json @@ -1636,8 +1636,8 @@ "exif-exifversion": "Exif atmains", "exif-colorspace": "Spalvū lauks", "exif-compressedbitsperpixel": "Abruozdielė sospaudėma rėžėms", - "exif-pixelydimension": "Abruozdielė platoms", - "exif-pixelxdimension": "Abruozdielė augoms", + "exif-pixelxdimension": "Abruozdielė platoms", + "exif-pixelydimension": "Abruozdielė augoms", "exif-usercomment": "Pāiškėnėmā", "exif-relatedsoundfile": "Prėgolons garsos", "exif-datetimeoriginal": "Žėnės paderbėma čiesos", diff --git a/languages/i18n/sh.json b/languages/i18n/sh.json index 17ef18340b..b2c99a6b5a 100644 --- a/languages/i18n/sh.json +++ b/languages/i18n/sh.json @@ -2519,8 +2519,8 @@ "exif-colorspace": "Prostor boje", "exif-componentsconfiguration": "Značenje pojedine komponente", "exif-compressedbitsperpixel": "Dubina boje poslije sažimanja", - "exif-pixelydimension": "Širina slike", - "exif-pixelxdimension": "Visina slike", + "exif-pixelxdimension": "Širina slike", + "exif-pixelydimension": "Visina slike", "exif-usercomment": "Korisnički komentari", "exif-relatedsoundfile": "Povezana zvučna datoteka", "exif-datetimeoriginal": "Datum i vrijeme generisanja podataka", diff --git a/languages/i18n/si.json b/languages/i18n/si.json index 087407028b..f5c2b71b84 100644 --- a/languages/i18n/si.json +++ b/languages/i18n/si.json @@ -2506,8 +2506,8 @@ "exif-colorspace": "වර්ණ අවකාශය", "exif-componentsconfiguration": "එක් එක් සංරචකයේ අර්ථය", "exif-compressedbitsperpixel": "රූප සම්පීඩන මාදිලිය", - "exif-pixelydimension": "ප්‍රතිබිම්බයෙහි පළල", - "exif-pixelxdimension": "ප්‍රතිබිම්බයෙහි උස", + "exif-pixelxdimension": "ප්‍රතිබිම්බයෙහි පළල", + "exif-pixelydimension": "ප්‍රතිබිම්බයෙහි උස", "exif-usercomment": "පරිශීලක පරිකථනයන්", "exif-relatedsoundfile": "සහසම්බන්ධිත ශ්‍රව්‍ය ගොනුව", "exif-datetimeoriginal": "දත්ත ජනන දිනය හා වේලාව", diff --git a/languages/i18n/sk.json b/languages/i18n/sk.json index 01ff533e8b..02494f2a4d 100644 --- a/languages/i18n/sk.json +++ b/languages/i18n/sk.json @@ -2532,8 +2532,8 @@ "exif-colorspace": "Farebný priestor", "exif-componentsconfiguration": "Význam jednotlivých zložiek", "exif-compressedbitsperpixel": "Komprimované bity na pixel", - "exif-pixelydimension": "Šírka obrázka", - "exif-pixelxdimension": "Výška obrázka", + "exif-pixelxdimension": "Šírka obrázka", + "exif-pixelydimension": "Výška obrázka", "exif-usercomment": "Komentár používateľa", "exif-relatedsoundfile": "Súvisiaci zvukový súbor", "exif-datetimeoriginal": "Dátum a čas vytvorenia dát", diff --git a/languages/i18n/sl.json b/languages/i18n/sl.json index b5febf8076..83b856657c 100644 --- a/languages/i18n/sl.json +++ b/languages/i18n/sl.json @@ -2695,8 +2695,8 @@ "exif-colorspace": "Barvni prostor", "exif-componentsconfiguration": "Pomen posameznih gradnikov", "exif-compressedbitsperpixel": "Velikost točke po stiskanju (v bitih)", - "exif-pixelydimension": "Širina slike", - "exif-pixelxdimension": "Višina slike", + "exif-pixelxdimension": "Širina slike", + "exif-pixelydimension": "Višina slike", "exif-usercomment": "Uporabniške pripombe", "exif-relatedsoundfile": "Pripadajoča zvočna datoteka", "exif-datetimeoriginal": "Datum in čas ustvaritve podatkov", @@ -3155,7 +3155,6 @@ "redirect-not-exists": "Vrednosti ni mogoče najti", "fileduplicatesearch": "Iskanje podvojenih datotek", "fileduplicatesearch-summary": "Iskanje podvojenih datotek, ki temelji na podlagi njenih hashvrednosti.", - "fileduplicatesearch-legend": "Poišči dvojnik", "fileduplicatesearch-filename": "Ime datoteke:", "fileduplicatesearch-submit": "Iskanje", "fileduplicatesearch-info": "$1 × $2 pik
Velikost datoteke: $3
Vrsta MIME: $4", diff --git a/languages/i18n/sli.json b/languages/i18n/sli.json index 05dd4553cc..59cb1fb8c4 100644 --- a/languages/i18n/sli.json +++ b/languages/i18n/sli.json @@ -1488,8 +1488,8 @@ "exif-artist": "Fotogroaf", "exif-flashpixversion": "understitzte Flashpix-Version", "exif-colorspace": "Forbraum", - "exif-pixelydimension": "Giltige Bildbreite", - "exif-pixelxdimension": "Giltige Bildhiehe", + "exif-pixelxdimension": "Giltige Bildbreite", + "exif-pixelydimension": "Giltige Bildhiehe", "exif-usercomment": "Nutzerkommentare", "exif-relatedsoundfile": "Zugehierige Tondatei", "exif-exposuretime-format": "$1 Sekunda ($2)", diff --git a/languages/i18n/sq.json b/languages/i18n/sq.json index 552431f0ee..16042c671c 100644 --- a/languages/i18n/sq.json +++ b/languages/i18n/sq.json @@ -2302,8 +2302,8 @@ "exif-colorspace": "Hapësira e ngjyrave", "exif-componentsconfiguration": "Kuptimi i secilit komponent", "exif-compressedbitsperpixel": "Lloji i ngjeshjes së figurës", - "exif-pixelydimension": "Gjerësia Image", - "exif-pixelxdimension": "lartësi Image", + "exif-pixelxdimension": "Gjerësia Image", + "exif-pixelydimension": "lartësi Image", "exif-usercomment": "Komentet e përdoruesit", "exif-relatedsoundfile": "Skeda audio shoqëruese", "exif-datetimeoriginal": "Data dhe koha e prodhimit të të dhënave", diff --git a/languages/i18n/sr-ec.json b/languages/i18n/sr-ec.json index d49fa652ac..06b1dc25d1 100644 --- a/languages/i18n/sr-ec.json +++ b/languages/i18n/sr-ec.json @@ -2643,8 +2643,8 @@ "exif-colorspace": "Простор боје", "exif-componentsconfiguration": "Значење сваког дела", "exif-compressedbitsperpixel": "Режим сажимања слике", - "exif-pixelydimension": "Ширина слике", - "exif-pixelxdimension": "Висина слике", + "exif-pixelxdimension": "Ширина слике", + "exif-pixelydimension": "Висина слике", "exif-usercomment": "Кориснички коментари", "exif-relatedsoundfile": "Повезани звучни запис", "exif-datetimeoriginal": "Датум и време сликања", @@ -3185,7 +3185,6 @@ "redirect-not-exists": "Вредност није пронађена", "fileduplicatesearch": "Претрага дупликата", "fileduplicatesearch-summary": "Претрага дуплираних датотека према хеш вредности.", - "fileduplicatesearch-legend": "Претрага дупликата", "fileduplicatesearch-filename": "Назив датотеке:", "fileduplicatesearch-submit": "Претражи", "fileduplicatesearch-info": "$1 × $2 пиксела
Величина датотеке: $3
MIME тип: $4", diff --git a/languages/i18n/sr-el.json b/languages/i18n/sr-el.json index 7ac1b05e16..6dd870026f 100644 --- a/languages/i18n/sr-el.json +++ b/languages/i18n/sr-el.json @@ -2585,8 +2585,8 @@ "exif-colorspace": "Prostor boje", "exif-componentsconfiguration": "Značenje svakog dela", "exif-compressedbitsperpixel": "Režim sažimanja slike", - "exif-pixelydimension": "Širina slike", - "exif-pixelxdimension": "Visina slike", + "exif-pixelxdimension": "Širina slike", + "exif-pixelydimension": "Visina slike", "exif-usercomment": "Korisnički komentari", "exif-relatedsoundfile": "Povezani zvučni zapis", "exif-datetimeoriginal": "Datum i vreme slikanja", @@ -3126,7 +3126,6 @@ "redirect-not-exists": "Vrednost nije pronađen", "fileduplicatesearch": "Pretraga duplikata", "fileduplicatesearch-summary": "Pretraga dupliranih datoteka prema heš vrednosti.", - "fileduplicatesearch-legend": "Pretraga duplikata", "fileduplicatesearch-filename": "Naziv datoteke:", "fileduplicatesearch-submit": "Pretraži", "fileduplicatesearch-info": "$1 × $2 piksela
Veličina datoteke: $3
MIME tip: $4", diff --git a/languages/i18n/stq.json b/languages/i18n/stq.json index 9f38a0a8f4..50c3bf9c29 100644 --- a/languages/i18n/stq.json +++ b/languages/i18n/stq.json @@ -1951,8 +1951,8 @@ "exif-colorspace": "Faawenruum", "exif-componentsconfiguration": "Betjuudenge fon älke Komponente", "exif-compressedbitsperpixel": "Komprimierde Bits pro Pixel", - "exif-pixelydimension": "Bieldebratte", - "exif-pixelxdimension": "Bieldehöchte", + "exif-pixelxdimension": "Bieldebratte", + "exif-pixelydimension": "Bieldehöchte", "exif-usercomment": "Benutserkommentoare", "exif-relatedsoundfile": "Touheerige Toondoatäi", "exif-datetimeoriginal": "Ärfoatengstiedpunkt", diff --git a/languages/i18n/su.json b/languages/i18n/su.json index 520f3b3d7c..d5e4dee077 100644 --- a/languages/i18n/su.json +++ b/languages/i18n/su.json @@ -2059,8 +2059,8 @@ "exif-colorspace": "Rohangan warna", "exif-componentsconfiguration": "Harti unggak komponén", "exif-compressedbitsperpixel": "Mode komprési gambar", - "exif-pixelydimension": "Lébar gambar", - "exif-pixelxdimension": "Jangkung gambar", + "exif-pixelxdimension": "Lébar gambar", + "exif-pixelydimension": "Jangkung gambar", "exif-usercomment": "Koméntar pamaké", "exif-datetimeoriginal": "Titimangsa jeung wanci dijieunna data", "exif-datetimedigitized": "Titimangsa jeung wanci digitisasi", diff --git a/languages/i18n/sv.json b/languages/i18n/sv.json index 2c8ed357bf..f7119bf37c 100644 --- a/languages/i18n/sv.json +++ b/languages/i18n/sv.json @@ -527,7 +527,7 @@ "noemail": "Användaren \"$1\" har inte registrerat någon e-postadress.", "noemailcreate": "Du måste ange en giltig e-postadress", "passwordsent": "Ett nytt lösenord har skickats till den e-postadress som användaren \"$1\" har registrerat. När du får meddelandet, var god logga in igen.", - "blocked-mailpassword": "Din IP-adress är blockerad, därför kan den inte användas för att få ett nytt lösenord.", + "blocked-mailpassword": "Din IP-adress har blockerats från att redigera. För att förhindra missbruk kan den inte användas för att få ett nytt lösenord.", "eauthentsent": "Ett e-postmeddelande för bekräftelse har skickats till den angivna e-postadressen.\nInnan någon annan e-post kan skickas till kontot, måste du följa instruktionerna i e-postmeddelandet för att bekräfta att kontot verkligen är ditt.", "throttled-mailpassword": "En lösenordsåterställning har redan skickats för mindre än {{PLURAL:$1|en timme|$1 timmar}} sedan.\nFör att förhindra missbruk skickas bara en lösenordsåterställning per {{PLURAL:$1|timme|$1-timmarsperiod}}.", "mailerror": "Fel vid skickande av e-post: $1", @@ -2250,6 +2250,7 @@ "ipb-unblock": "Ta bort blockering av en användare eller IP-adress", "ipb-blocklist": "Visa gällande blockeringar", "ipb-blocklist-contribs": "Bidrag från {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "$1 kvar", "unblockip": "Ta bort blockering av användare/IP-adress", "unblockiptext": "Använd formuläret nedan för att ta bort blockeringen av en IP-adress.", "ipusubmit": "Upphäv denna blockering", @@ -2761,8 +2762,8 @@ "exif-colorspace": "Färgrymd", "exif-componentsconfiguration": "Komponentanalys", "exif-compressedbitsperpixel": "Bildkomprimeringsläge", - "exif-pixelydimension": "Bildbredd", - "exif-pixelxdimension": "Bildhöjd", + "exif-pixelxdimension": "Bildbredd", + "exif-pixelydimension": "Bildhöjd", "exif-usercomment": "Kommentarer", "exif-relatedsoundfile": "Relaterad ljudfil", "exif-datetimeoriginal": "Exponeringstidpunkt", @@ -3220,7 +3221,6 @@ "redirect-not-exists": "Värdet hittades inte", "fileduplicatesearch": "Sök efter dubblettfiler", "fileduplicatesearch-summary": "Sök efter dubblettfiler baserat på filernas hash-värden.", - "fileduplicatesearch-legend": "Sök efter en dubblettfil", "fileduplicatesearch-filename": "Filnamn:", "fileduplicatesearch-submit": "Sök", "fileduplicatesearch-info": "$1 × $2 pixlar
Filstorlek: $3
MIME-typ: $4", @@ -3421,7 +3421,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|skyddade}} $3 $4 [kaskaderande]", "logentry-protect-modify": "$1 {{GENDER:$2|ändrade}} skyddsnivån för $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|ändrade}} skyddsnivån för $3 $4 [kaskaderande]", - "logentry-rights-rights": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3 från $4 till $5", + "logentry-rights-rights": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för {{GENDER:$3|$3}} från $4 till $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3", "logentry-rights-autopromote": "$1 {{GENDER:$2|befordrades}} automatiskt från $4 till $5", "logentry-upload-upload": "$1 {{GENDER:$2|laddade upp}} $3", @@ -3514,6 +3514,7 @@ "api-error-unknownerror": "Okänt fel: \"$1\".", "api-error-uploaddisabled": "Uppladdning är inaktiverad på denna wiki.", "api-error-verification-error": "Denna fil kan vara skadad eller har fel filändelse.", + "api-error-was-deleted": "En fil med detta namn har tidigare laddats upp och sedan raderats.", "duration-seconds": "$1 {{PLURAL:$1|sekund|sekunder}}", "duration-minutes": "$1 {{PLURAL:$1|minut|minuter}}", "duration-hours": "$1 {{PLURAL:$1|timme|timmar}}", @@ -3604,6 +3605,7 @@ "special-characters-group-ipa": "IPA", "special-characters-group-symbols": "Symboler", "special-characters-group-greek": "Grekiska", + "special-characters-group-greekextended": "Grekiska utvidgad", "special-characters-group-cyrillic": "Kyrilliskt", "special-characters-group-arabic": "Arabiska", "special-characters-group-arabicextended": "Arabiska utökade", diff --git a/languages/i18n/sw.json b/languages/i18n/sw.json index 532f1abb64..33d97e7c40 100644 --- a/languages/i18n/sw.json +++ b/languages/i18n/sw.json @@ -2134,8 +2134,8 @@ "exif-copyright": "Mwenye hatimiliki", "exif-exifversion": "Mtindo wa Exif", "exif-componentsconfiguration": "Maana ya kila kijenzi", - "exif-pixelydimension": "Upana wa picha", - "exif-pixelxdimension": "Urefu wa picha", + "exif-pixelxdimension": "Upana wa picha", + "exif-pixelydimension": "Urefu wa picha", "exif-usercomment": "Maoni ya mtumiaji", "exif-relatedsoundfile": "Faili la sauti linalohusika", "exif-lightsource": "Mwanga", diff --git a/languages/i18n/szl.json b/languages/i18n/szl.json index ee91968fe3..2d3e184003 100644 --- a/languages/i18n/szl.json +++ b/languages/i18n/szl.json @@ -1853,8 +1853,8 @@ "exif-colorspace": "Přestřyń kolorůw", "exif-componentsconfiguration": "Značyńy skuadowych", "exif-compressedbitsperpixel": "Skůmpresowanych bitůw na piksel", - "exif-pixelydimension": "Prawidłowa szyrzka uobrozu", - "exif-pixelxdimension": "Prawidłowo wyżka uobrozu", + "exif-pixelxdimension": "Prawidłowa szyrzka uobrozu", + "exif-pixelydimension": "Prawidłowo wyżka uobrozu", "exif-usercomment": "Kůmyntoř užytkowńika", "exif-relatedsoundfile": "Powjůnzany plik audjo", "exif-datetimeoriginal": "Data i čas utwořyńo uoryginouu", diff --git a/languages/i18n/ta.json b/languages/i18n/ta.json index dfa514b27d..c75952ab8a 100644 --- a/languages/i18n/ta.json +++ b/languages/i18n/ta.json @@ -2613,8 +2613,8 @@ "exif-colorspace": "நிற வெளி", "exif-componentsconfiguration": "ஒவ்வெரு அங்கத்தினதும் பொருள்", "exif-compressedbitsperpixel": "படிம சுறுக்க முறை", - "exif-pixelydimension": "பட அகலம்", - "exif-pixelxdimension": "பட உயரம்", + "exif-pixelxdimension": "பட அகலம்", + "exif-pixelydimension": "பட உயரம்", "exif-usercomment": "பயனர் கருத்துக்கள்", "exif-relatedsoundfile": "தொடர்புள்ள ஒலிக்கோப்பு", "exif-datetimeoriginal": "தரவு உருவாக்க நாள் நேரம்", @@ -3064,7 +3064,6 @@ "redirect-not-exists": "மதிப்பு காணப்பெறவில்லை", "fileduplicatesearch": "நகல் கோப்புகளைத் தேடுக", "fileduplicatesearch-summary": "நகல் கோப்புகளை ஹாஷ் மதிப்புகள் அடிப்படையில் தேடு.", - "fileduplicatesearch-legend": "நகல்களைத் தேடுக", "fileduplicatesearch-filename": "கோப்பின் பெயர்:", "fileduplicatesearch-submit": "தேடுக", "fileduplicatesearch-info": "$1 × $2 பிக்சல்
கோப்பின் அளவு: $3
MIME வகை: $4", diff --git a/languages/i18n/te.json b/languages/i18n/te.json index 8f4ce43e94..220a00963a 100644 --- a/languages/i18n/te.json +++ b/languages/i18n/te.json @@ -2488,8 +2488,8 @@ "exif-colorspace": "వర్ణస్థలం", "exif-componentsconfiguration": "ప్రతీ అంగం యొక్క అర్థం", "exif-compressedbitsperpixel": "బొమ్మ కుదింపు పద్ధతి", - "exif-pixelydimension": "బొమ్మ వెడల్పు", - "exif-pixelxdimension": "బొమ్మ ఎత్తు", + "exif-pixelxdimension": "బొమ్మ వెడల్పు", + "exif-pixelydimension": "బొమ్మ ఎత్తు", "exif-usercomment": "వాడుకరి వ్యాఖ్యలు", "exif-relatedsoundfile": "సంబంధిత శబ్ద ఫైలు", "exif-datetimeoriginal": "డేటా తయారైన తేదీ, సమయం", diff --git a/languages/i18n/tg-cyrl.json b/languages/i18n/tg-cyrl.json index 7a0fc8178d..a885bdc721 100644 --- a/languages/i18n/tg-cyrl.json +++ b/languages/i18n/tg-cyrl.json @@ -1771,8 +1771,8 @@ "exif-colorspace": "Фазои ранг", "exif-componentsconfiguration": "Маънии ҳар як аз қисмҳо", "exif-compressedbitsperpixel": "Ҳолати фишурдасозии акс", - "exif-pixelydimension": "Арзи акс", - "exif-pixelxdimension": "Тӯли акс", + "exif-pixelxdimension": "Арзи акс", + "exif-pixelydimension": "Тӯли акс", "exif-usercomment": "Тавзеҳоти корбар", "exif-relatedsoundfile": "Парвандаи сабти алоқаманд", "exif-datetimeoriginal": "Таърих ва вақти тавлиди додаҳо", diff --git a/languages/i18n/tg-latn.json b/languages/i18n/tg-latn.json index f6e9a95f04..30f212bff5 100644 --- a/languages/i18n/tg-latn.json +++ b/languages/i18n/tg-latn.json @@ -1418,8 +1418,8 @@ "exif-colorspace": "Fazoi rang", "exif-componentsconfiguration": "Ma'niji har jak az qismho", "exif-compressedbitsperpixel": "Holati fişurdasoziji aks", - "exif-pixelydimension": "Arzi aksi mū'tabar", - "exif-pixelxdimension": "Tūli aksi mū'tabar", + "exif-pixelxdimension": "Arzi aksi mū'tabar", + "exif-pixelydimension": "Tūli aksi mū'tabar", "exif-usercomment": "Tavzehoti korbar", "exif-relatedsoundfile": "Parvandai sabti aloqamand", "exif-datetimeoriginal": "Ta'rix va vaqti tavlidi dodaho", diff --git a/languages/i18n/th.json b/languages/i18n/th.json index 453be28df6..23fa56baeb 100644 --- a/languages/i18n/th.json +++ b/languages/i18n/th.json @@ -2479,8 +2479,8 @@ "exif-colorspace": "สเปซสี", "exif-componentsconfiguration": "ความหมายของแต่ละคอมโพเนนต์", "exif-compressedbitsperpixel": "โหมดการบีบอัดภาพ", - "exif-pixelydimension": "ความกว้างของภาพ", - "exif-pixelxdimension": "ความสูงของภาพ", + "exif-pixelxdimension": "ความกว้างของภาพ", + "exif-pixelydimension": "ความสูงของภาพ", "exif-usercomment": "ความเห็นผู้ใช้", "exif-relatedsoundfile": "ไฟล์เสียงที่เกี่ยวข้อง", "exif-datetimeoriginal": "วันที่และเวลาการก่อกำเนิดข้อมูล", diff --git a/languages/i18n/tk.json b/languages/i18n/tk.json index 7e088736bb..21dafb8fc3 100644 --- a/languages/i18n/tk.json +++ b/languages/i18n/tk.json @@ -1857,8 +1857,8 @@ "exif-colorspace": "Reňk giňişligi", "exif-componentsconfiguration": "Her komponentiň manysy", "exif-compressedbitsperpixel": "Surat gysyş režimi", - "exif-pixelydimension": "Dogry surat ini", - "exif-pixelxdimension": "Dogry surat beýikligi", + "exif-pixelxdimension": "Dogry surat ini", + "exif-pixelydimension": "Dogry surat beýikligi", "exif-usercomment": "Ulanyjy teswirleri", "exif-relatedsoundfile": "Degişli audio faýl", "exif-datetimeoriginal": "Asyl sene we wagt", diff --git a/languages/i18n/tl.json b/languages/i18n/tl.json index 5a6ea0fccb..6e622a872d 100644 --- a/languages/i18n/tl.json +++ b/languages/i18n/tl.json @@ -2329,8 +2329,8 @@ "exif-colorspace": "Espasyo ng kulay", "exif-componentsconfiguration": "Kahulugan ng bawat komponente", "exif-compressedbitsperpixel": "Modalidad (paraan) ng pagsisiksik ng larawan", - "exif-pixelydimension": "Lapad ng larawan", - "exif-pixelxdimension": "Taas ng larawan", + "exif-pixelxdimension": "Lapad ng larawan", + "exif-pixelydimension": "Taas ng larawan", "exif-usercomment": "Mga kumento ng tagagamit", "exif-relatedsoundfile": "Kaugnay na talaksang nadidinig (audio)", "exif-datetimeoriginal": "Petsa at oras ng paglikha ng mga dato", @@ -2845,7 +2845,6 @@ "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Landas ng panitik]", "fileduplicatesearch": "Maghanap ng kaparehong mga talaksan", "fileduplicatesearch-summary": "Maghanap ng mga kaparehong mga talaksan sa baba ng kanyang halaga ng ''hash''.", - "fileduplicatesearch-legend": "Maghanap ng mga kapareho", "fileduplicatesearch-filename": "Pangalan ng file:", "fileduplicatesearch-submit": "Hanapin", "fileduplicatesearch-info": "$1 × $2 pixel
Laki ng talaksan: $3
Uri ng MIME: $4", diff --git a/languages/i18n/tr.json b/languages/i18n/tr.json index 1b7236a6e2..bd1e9fe826 100644 --- a/languages/i18n/tr.json +++ b/languages/i18n/tr.json @@ -2659,8 +2659,8 @@ "exif-colorspace": "Renk aralığı", "exif-componentsconfiguration": "Her bileşenin anlamı", "exif-compressedbitsperpixel": "Resim sıkıştırma biçimi", - "exif-pixelydimension": "Resim genişliği", - "exif-pixelxdimension": "Resim yüksekliği", + "exif-pixelxdimension": "Resim genişliği", + "exif-pixelydimension": "Resim yüksekliği", "exif-usercomment": "Kullanıcı yorumu", "exif-relatedsoundfile": "İlişkin ses dosyası", "exif-datetimeoriginal": "Verinin ilk yaratılma zamanı", diff --git a/languages/i18n/tt-cyrl.json b/languages/i18n/tt-cyrl.json index 98e73562f3..08c0e0fc9d 100644 --- a/languages/i18n/tt-cyrl.json +++ b/languages/i18n/tt-cyrl.json @@ -1817,8 +1817,8 @@ "exif-colorspace": "Төсләр тирәлеге", "exif-componentsconfiguration": "Төсләр төзелешенең конфигурациясе", "exif-compressedbitsperpixel": "Кысылудан соң төснең тирәнлеге", - "exif-pixelydimension": "Рәсемнең киңлеге", - "exif-pixelxdimension": "Рәсемнең биеклеге", + "exif-pixelxdimension": "Рәсемнең киңлеге", + "exif-pixelydimension": "Рәсемнең биеклеге", "exif-usercomment": "Өстәмә җавап", "exif-relatedsoundfile": "Тавыш файлы җавабы", "exif-datetimeoriginal": "Чын вакыты", diff --git a/languages/i18n/tt-latn.json b/languages/i18n/tt-latn.json index a78db9e8a0..87298ce321 100644 --- a/languages/i18n/tt-latn.json +++ b/languages/i18n/tt-latn.json @@ -1420,8 +1420,8 @@ "exif-colorspace": "Töslär tirälege", "exif-componentsconfiguration": "Töslär tözeleşeneñ konfiguratsiäse", "exif-compressedbitsperpixel": "Qısıludan soñ tösneñ tiränlege", - "exif-pixelydimension": "Räsemneñ tulı bieklege", - "exif-pixelxdimension": "Räsemneñ tulı kiñlege", + "exif-pixelxdimension": "Räsemneñ tulı bieklege", + "exif-pixelydimension": "Räsemneñ tulı kiñlege", "exif-usercomment": "Östämä cawap", "exif-relatedsoundfile": "Tawış faylı cawabı", "exif-datetimeoriginal": "Çın waqıtı", diff --git a/languages/i18n/ug-arab.json b/languages/i18n/ug-arab.json index 2612631a74..3acf4d0c3c 100644 --- a/languages/i18n/ug-arab.json +++ b/languages/i18n/ug-arab.json @@ -2323,8 +2323,8 @@ "exif-colorspace": "رەڭ بوشلۇقى", "exif-componentsconfiguration": "ھەر بىر تەركىپنىڭ سالمىقى", "exif-compressedbitsperpixel": "سۈرەت پرىسلاش شەكلى", - "exif-pixelydimension": "سۈرەت كەڭلىكى", - "exif-pixelxdimension": "سۈرەت ئېگىزلىكى", + "exif-pixelxdimension": "سۈرەت كەڭلىكى", + "exif-pixelydimension": "سۈرەت ئېگىزلىكى", "exif-usercomment": "ئىشلەتكۈچى ئىزاھاتى", "exif-relatedsoundfile": "مۇناسىۋەتلىك ئۈن ھۆججىتى", "exif-datetimeoriginal": "سانلىق مەلۇمات قۇرۇلغان چېسلا ۋە ۋاقىت", diff --git a/languages/i18n/uk.json b/languages/i18n/uk.json index 78d3e9b8c3..08e281ce64 100644 --- a/languages/i18n/uk.json +++ b/languages/i18n/uk.json @@ -2811,8 +2811,8 @@ "exif-colorspace": "Колірний простір", "exif-componentsconfiguration": "Конфігурація кольорових компонентів", "exif-compressedbitsperpixel": "Глибина кольору після стиснення", - "exif-pixelydimension": "Ширина зображення", - "exif-pixelxdimension": "Висота зображення", + "exif-pixelxdimension": "Ширина зображення", + "exif-pixelydimension": "Висота зображення", "exif-usercomment": "Додатковий коментар", "exif-relatedsoundfile": "Файл звукового коментаря", "exif-datetimeoriginal": "Оригинальні дата й час", @@ -3363,7 +3363,6 @@ "redirect-not-exists": "Значення не знайдено", "fileduplicatesearch": "Пошук файлів-дублікатів", "fileduplicatesearch-summary": "Пошук дублікатів файлів на основі хеш-значень.", - "fileduplicatesearch-legend": "Пошук дублікатів", "fileduplicatesearch-filename": "Назва файлу:", "fileduplicatesearch-submit": "Знайти", "fileduplicatesearch-info": "$1 × $2 пікселів
Розмір файлу: $3
MIME-тип: $4", diff --git a/languages/i18n/uz.json b/languages/i18n/uz.json index eca9197270..f890815547 100644 --- a/languages/i18n/uz.json +++ b/languages/i18n/uz.json @@ -1239,6 +1239,7 @@ "pagemovedsub": "Sahifa qayta nomlandi", "movepage-moved": "'''Sahifa nomi «$1»dan «$2»ga koʻchirildi'''", "movepage-moved-redirect": "Qayta yo‘naltirish yaratildi.", + "articleexists": "Shunday nomli sahifa mavjud, yoki siz tanlagan nom mumkin emas. \nIltimos, boshqa nom tanlang.", "movetalk": "Mos munozara sahifasini qayta nomlash", "move-subpages": "Ostsahifalarni ham qayta nomlash ($1 tadan kam)", "move-talk-subpages": "Munozara sahifasining ostsahifalarini ham qayta nomlash ($1 tadan kam)", diff --git a/languages/i18n/vec.json b/languages/i18n/vec.json index 6358cec8a1..5ce94834bf 100644 --- a/languages/i18n/vec.json +++ b/languages/i18n/vec.json @@ -2299,8 +2299,8 @@ "exif-colorspace": "Spazio de i cołori", "exif-componentsconfiguration": "Significato de ciascuna componente", "exif-compressedbitsperpixel": "Modalità de compression imagine", - "exif-pixelydimension": "Larghesa imajine", - "exif-pixelxdimension": "Altesa imajine", + "exif-pixelxdimension": "Larghesa imajine", + "exif-pixelydimension": "Altesa imajine", "exif-usercomment": "Note de l'utente", "exif-relatedsoundfile": "File audio cołegà", "exif-datetimeoriginal": "Data e ora de creassion de i dati", diff --git a/languages/i18n/vep.json b/languages/i18n/vep.json index 4ce72b49a7..5419b68a42 100644 --- a/languages/i18n/vep.json +++ b/languages/i18n/vep.json @@ -1880,8 +1880,8 @@ "exif-colorspace": "Mujuavaruz", "exif-componentsconfiguration": "Mujukomponentoiden konfiguracii", "exif-compressedbitsperpixel": "Mujun süvuz ahtištusen jäl'ghe", - "exif-pixelydimension": "Kuvan leveduz", - "exif-pixelxdimension": "Kuvan korktuz", + "exif-pixelxdimension": "Kuvan leveduz", + "exif-pixelydimension": "Kuvan korktuz", "exif-usercomment": "Kävutajan homaičendad", "exif-relatedsoundfile": "Kulundkommentarijan fail", "exif-datetimeoriginal": "Todesine dat da aig", @@ -2223,7 +2223,6 @@ "version-entrypoints-header-url": "URL", "fileduplicatesearch": "Ectä kaksitadud failad", "fileduplicatesearch-summary": "Ühtejiččiden failoiden ecmine niiden heš-kodan mödhe.", - "fileduplicatesearch-legend": "Ectä dublikatoid", "fileduplicatesearch-filename": "Failannimi:", "fileduplicatesearch-submit": "Ectä", "fileduplicatesearch-info": "$1 × $2 pikselad
Failan suruz: $3
MIME-tip: $4", diff --git a/languages/i18n/vi.json b/languages/i18n/vi.json index dc92a0124c..3ca8f0ca6c 100644 --- a/languages/i18n/vi.json +++ b/languages/i18n/vi.json @@ -2759,8 +2759,8 @@ "exif-colorspace": "Không gian màu", "exif-componentsconfiguration": "Ý nghĩa thành phần", "exif-compressedbitsperpixel": "Độ nén (bit/điểm)", - "exif-pixelydimension": "Chiều ngang hình", - "exif-pixelxdimension": "Chiều cao hình", + "exif-pixelxdimension": "Chiều ngang hình", + "exif-pixelydimension": "Chiều cao hình", "exif-usercomment": "Lời bình của tác giả", "exif-relatedsoundfile": "Tập tin âm thanh liên quan", "exif-datetimeoriginal": "Ngày giờ sinh dữ liệu", diff --git a/languages/i18n/vo.json b/languages/i18n/vo.json index b98b3a53cb..cad647b4b3 100644 --- a/languages/i18n/vo.json +++ b/languages/i18n/vo.json @@ -1828,8 +1828,8 @@ "exif-colorspace": "Kölaspad", "exif-componentsconfiguration": "Sinif komponena alik", "exif-compressedbitsperpixel": "Mod kobopedama magoda", - "exif-pixelydimension": "Magodavidot", - "exif-pixelxdimension": "Magodageilot", + "exif-pixelxdimension": "Magodavidot", + "exif-pixelydimension": "Magodageilot", "exif-usercomment": "Küpets gebana", "exif-relatedsoundfile": "Tonaragiv tefik", "exif-datetimeoriginal": "Dät e tim jafama nünodas", diff --git a/languages/i18n/vro.json b/languages/i18n/vro.json index afd8d8d996..3e1403c9e9 100644 --- a/languages/i18n/vro.json +++ b/languages/i18n/vro.json @@ -1517,8 +1517,8 @@ "exif-colorspace": "Värmiruum", "exif-componentsconfiguration": "Egä osa tähendüs", "exif-compressedbitsperpixel": "Pildi kokkopakmismuud", - "exif-pixelydimension": "Kõlbolinõ pildi lakjus", - "exif-pixelxdimension": "Kõlbolinõ pildi korgus", + "exif-pixelxdimension": "Kõlbolinõ pildi lakjus", + "exif-pixelydimension": "Kõlbolinõ pildi korgus", "exif-usercomment": "Pruukja kommõntaariq", "exif-relatedsoundfile": "Manopant helüteedüstü", "exif-datetimeoriginal": "Luumisaig", diff --git a/languages/i18n/xal.json b/languages/i18n/xal.json index dbcefa4972..bae1ce5007 100644 --- a/languages/i18n/xal.json +++ b/languages/i18n/xal.json @@ -830,8 +830,8 @@ "exif-artist": "Зокъялч", "exif-copyright": "Зокъялчин зөвәнә эзн", "exif-exifversion": "Exif'ин һарц", - "exif-pixelydimension": "Күцц зургин өндр", - "exif-pixelxdimension": "Күцц зургин өргн", + "exif-pixelxdimension": "Күцц зургин өндр", + "exif-pixelydimension": "Күцц зургин өргн", "exif-exposuretime": "Дәврдгсн цаг", "exif-exposuretime-format": "$1 с ($2)", "exif-contrast": "Зөрү", diff --git a/languages/i18n/yi.json b/languages/i18n/yi.json index b86339ee10..dd0b17d59a 100644 --- a/languages/i18n/yi.json +++ b/languages/i18n/yi.json @@ -2482,8 +2482,8 @@ "exif-colorspace": "קאליר רוים", "exif-componentsconfiguration": "מיינונג פון יעדן באשטאנדטייל", "exif-compressedbitsperpixel": "בילד צוזאמקוועטשן מאוד", - "exif-pixelydimension": "בילד ברייט", - "exif-pixelxdimension": "בילד הייך", + "exif-pixelxdimension": "בילד ברייט", + "exif-pixelydimension": "בילד הייך", "exif-usercomment": "באניצער קאמענטורן", "exif-relatedsoundfile": "פֿאַרבונדענע אוידיאָ טעקע", "exif-datetimeoriginal": "דאטום און צייט פון דאַטן באשאפונג", diff --git a/languages/i18n/yo.json b/languages/i18n/yo.json index 91af0cee53..4afce94b02 100644 --- a/languages/i18n/yo.json +++ b/languages/i18n/yo.json @@ -2222,8 +2222,8 @@ "exif-colorspace": "Àyè àwọ̀", "exif-componentsconfiguration": "Ìtumọ̀ àkóónú kọ̀ọ̀kan", "exif-compressedbitsperpixel": "Àyè ìtẹ̀pọ̀ àwòrán", - "exif-pixelydimension": "Ìfẹ̀ àwòrán", - "exif-pixelxdimension": "Ìga àwòrán", + "exif-pixelxdimension": "Ìfẹ̀ àwòrán", + "exif-pixelydimension": "Ìga àwòrán", "exif-usercomment": "Àwọn àwìsọ oníṣe", "exif-relatedsoundfile": "Fáìlì ìfohùn tó jọra", "exif-datetimeoriginal": "Ọjọ́ àti àsìkò tí dátà jade", diff --git a/languages/i18n/yue.json b/languages/i18n/yue.json index 8f01a1719d..bb65facbb3 100644 --- a/languages/i18n/yue.json +++ b/languages/i18n/yue.json @@ -2499,8 +2499,8 @@ "exif-colorspace": "色彩空間", "exif-componentsconfiguration": "每個部份嘅意思", "exif-compressedbitsperpixel": "影像壓縮模式", - "exif-pixelydimension": "影像闊度", - "exif-pixelxdimension": "影像高度", + "exif-pixelxdimension": "影像闊度", + "exif-pixelydimension": "影像高度", "exif-usercomment": "用家註腳", "exif-relatedsoundfile": "相關聲音檔", "exif-datetimeoriginal": "原創日期時間", diff --git a/languages/i18n/zh-hans.json b/languages/i18n/zh-hans.json index 5d07d5ee28..29aa7bf8be 100644 --- a/languages/i18n/zh-hans.json +++ b/languages/i18n/zh-hans.json @@ -2802,8 +2802,8 @@ "exif-colorspace": "色彩空间", "exif-componentsconfiguration": "各部分含义", "exif-compressedbitsperpixel": "图像压缩模式", - "exif-pixelydimension": "图像宽度", - "exif-pixelxdimension": "图像高度", + "exif-pixelxdimension": "图像宽度", + "exif-pixelydimension": "图像高度", "exif-usercomment": "用户评论", "exif-relatedsoundfile": "相关声音文件", "exif-datetimeoriginal": "数据生成日期时间", @@ -3266,7 +3266,6 @@ "redirect-not-exists": "没找到相应值", "fileduplicatesearch": "搜索重复文件", "fileduplicatesearch-summary": "根据哈希(hash)值搜索重复文件。", - "fileduplicatesearch-legend": "搜索重复文件", "fileduplicatesearch-filename": "文件名:", "fileduplicatesearch-submit": "搜索", "fileduplicatesearch-info": "$1×$2像素
文件大小:$3
MIME类型:$4", diff --git a/languages/i18n/zh-hant.json b/languages/i18n/zh-hant.json index 04c23339cf..456d23e058 100644 --- a/languages/i18n/zh-hant.json +++ b/languages/i18n/zh-hant.json @@ -509,7 +509,7 @@ "nocookieslogin": "要登入 {{SITENAME}} 使用者需使用 Cookies,\n您的 Cookies 未尚開啟。\n請在開啟後重試。", "nocookiesfornew": "這個使用者的帳號未建立,我們不能確認它的來源。\n請確認您已開啟 Cookie,重新載入後再試。", "noname": "您輸入的使用者名稱無效。", - "loginsuccesstitle": "登入成功", + "loginsuccesstitle": "已登入", "loginsuccess": "{{GENDER:|您|妳|你}}現在已經以 \"$1\" 的身分登入了 {{SITENAME}}。", "nosuchuser": "查無使用者 \"$1\"。\n使用者名稱有大小寫區分,\n請檢查您拼寫是否正確,或者 [[Special:UserLogin/signup|建立新帳號]]。", "nosuchusershort": "查無使用者 \"$1\",\n請檢查您拼寫是否正確。", @@ -2767,8 +2767,8 @@ "exif-colorspace": "色彩空間", "exif-componentsconfiguration": "每像素內含", "exif-compressedbitsperpixel": "影像壓縮模式", - "exif-pixelydimension": "圖片寬度", - "exif-pixelxdimension": "圖片高度", + "exif-pixelxdimension": "圖片寬度", + "exif-pixelydimension": "圖片高度", "exif-usercomment": "使用者評論", "exif-relatedsoundfile": "相關的音效檔案", "exif-datetimeoriginal": "資料產生的日期時間", @@ -3230,7 +3230,6 @@ "redirect-not-exists": "查無值", "fileduplicatesearch": "搜尋重複檔案", "fileduplicatesearch-summary": "依據雜湊值 (Hash) 來搜尋重複的檔案。", - "fileduplicatesearch-legend": "搜尋重複", "fileduplicatesearch-filename": "檔案名稱:", "fileduplicatesearch-submit": "搜尋", "fileduplicatesearch-info": "$1 × $2 像素
檔案大小:$3
MIME 類型:$4", diff --git a/maintenance/rebuildLocalisationCache.php b/maintenance/rebuildLocalisationCache.php index 68b6ea311d..82b362b817 100644 --- a/maintenance/rebuildLocalisationCache.php +++ b/maintenance/rebuildLocalisationCache.php @@ -29,6 +29,8 @@ * @ingroup Maintenance */ +use MediaWiki\MediaWikiServices; + require_once __DIR__ . '/Maintenance.php'; /** @@ -111,9 +113,9 @@ class RebuildLocalisationCache extends Maintenance { $pid = ( $threads > 1 ) ? pcntl_fork() : -1; if ( $pid === 0 ) { - // Child, reseed because there is no bug in PHP: - // http://bugs.php.net/bug.php?id=42465 - mt_srand( getmypid() ); + // Reset services, so we don't re-use connections. + MediaWikiServices::resetChildProcessServices(); + $this->doRebuild( $codes, $lc, $force ); exit( 0 ); } elseif ( $pid === -1 ) { diff --git a/resources/Resources.php b/resources/Resources.php index 5cc5681ba0..270dbd4040 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1200,6 +1200,7 @@ return [ 'mediawiki.user', 'mediawiki.Upload', 'mediawiki.jqueryMsg', + 'mediawiki.widgets.StashedFileWidget' ], 'messages' => [ 'upload-form-label-infoform-title', @@ -2241,7 +2242,19 @@ return [ 'position' => 'top', 'targets' => [ 'desktop', 'mobile' ], ], - + 'mediawiki.widgets.StashedFileWidget' => [ + 'scripts' => [ + 'resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.js', + ], + 'skinStyles' => [ + 'default' => [ + 'resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.less', + ], + ], + 'dependencies' => [ + 'oojs-ui-core', + ], + ], /* es5-shim */ 'es5-shim' => [ 'scripts' => [ diff --git a/resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.js b/resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.js new file mode 100644 index 0000000000..cdcf5a23a8 --- /dev/null +++ b/resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.js @@ -0,0 +1,158 @@ +/*! + * MediaWiki Widgets - StashedFileWidget class. + * + * @copyright 2011-2016 MediaWiki Widgets Team and others; see AUTHORS.txt + * @license The MIT License (MIT); see LICENSE.txt + */ +( function ( $, mw, OO ) { + + /** + * Accepts a stashed file and displays the information for purposes of + * publishing the file at the behest of the user. + * + * Example use: + * var widget = new mw.widgets.StashedFileWidget( { + * filekey: '12r9e4rugeec.ddtmmp.1.jpg', + * } ); + * + * widget.getValue(); // '12r9e4rugeec.ddtmmp.1.jpg' + * widget.setValue( '12r9epfbnskk.knfiy7.1.jpg' ); + * widget.getValue(); // '12r9epfbnskk.knfiy7.1.jpg' + * + * Note that this widget will not finish an upload for you. Use mw.Upload + * and mw.Upload#setFilekey, then mw.Upload#finishStashUpload to accomplish + * that. + * + * @class mw.widgets.StashedFileWidget + * @extends OO.ui.Widget + */ + + /** + * @constructor + * @param {Object} config Configuration options + * @cfg {string} filekey The filekey of the stashed file. + * @cfg {Object} [api] API to use for thumbnails. + */ + mw.widgets.StashedFileWidget = function MWWStashedFileWidget( config ) { + if ( !config.api ) { + config.api = new mw.Api(); + } + + // Parent constructor + mw.widgets.StashedFileWidget.parent.call( this, config ); + + // Mixin constructors + OO.ui.mixin.IconElement.call( this, config ); + OO.ui.mixin.LabelElement.call( this, config ); + OO.ui.mixin.PendingElement.call( this, config ); + + // Properties + this.api = config.api; + this.$info = $( '' ); + this.setValue( config.filekey ); + this.$label.addClass( 'mw-widgets-stashedFileWidget-label' ); + this.$info + .addClass( 'mw-widgets-stashedFileWidget-info' ) + .append( this.$icon, this.$label ); + + this.$thumbnail = $( '
' ).addClass( 'mw-widgets-stashedFileWidget-thumbnail' ); + this.setPendingElement( this.$thumbnail ); + + this.$thumbContain = $( '
' ) + .addClass( 'mw-widgets-stashedFileWidget-thumbnail-container' ) + .append( this.$thumbnail, this.$info ); + + this.$element + .addClass( 'mw-widgets-stashedFileWidget' ) + .append( this.$thumbContain ); + + this.updateUI(); + }; + + OO.inheritClass( mw.widgets.StashedFileWidget, OO.ui.Widget ); + OO.mixinClass( mw.widgets.StashedFileWidget, OO.ui.mixin.IconElement ); + OO.mixinClass( mw.widgets.StashedFileWidget, OO.ui.mixin.LabelElement ); + OO.mixinClass( mw.widgets.StashedFileWidget, OO.ui.mixin.PendingElement ); + + /** + * Get the current filekey. + * + * @return {string|null} + */ + mw.widgets.StashedFileWidget.prototype.getValue = function () { + return this.filekey; + }; + + /** + * Set the filekey. + * + * @param {string|null} filekey + */ + mw.widgets.StashedFileWidget.prototype.setValue = function ( filekey ) { + if ( filekey !== this.filekey ) { + this.filekey = filekey; + this.updateUI(); + this.emit( 'change', this.filekey ); + } + }; + + mw.widgets.StashedFileWidget.prototype.updateUI = function () { + var $label, $filetype; + + if ( this.filekey ) { + this.$element.removeClass( 'mw-widgets-stashedFileWidget-empty' ); + $label = $( [] ); + $filetype = $( '' ) + .addClass( 'mw-widgets-stashedFileWidget-fileType' ); + + $label = $label.add( + $( '' ) + .addClass( 'mw-widgets-stashedFileWidget-filekey' ) + .text( this.filekey ) + ).add( $filetype ); + + this.setLabel( $label ); + + this.pushPending(); + this.loadAndGetImageUrl().done( function ( url, mime ) { + this.$thumbnail.css( 'background-image', 'url( ' + url + ' )' ); + if ( mime ) { + $filetype.text( mime ); + this.setLabel( $label ); + } + }.bind( this ) ).fail( function () { + this.$thumbnail.append( + new OO.ui.IconWidget( { + icon: 'attachment', + classes: [ 'mw-widgets-stashedFileWidget-noThumbnail-icon' ] + } ).$element + ); + }.bind( this ) ).always( function () { + this.popPending(); + }.bind( this ) ); + } else { + this.$element.addClass( 'mw-widgets-stashedFileWidget-empty' ); + this.setLabel( '' ); + } + }; + + mw.widgets.StashedFileWidget.prototype.loadAndGetImageUrl = function () { + var filekey = this.filekey; + + if ( filekey ) { + return this.api.get( { + action: 'query', + prop: 'stashimageinfo', + siifilekey: filekey, + siiprop: [ 'size', 'url', 'mime' ], + siiurlwidth: 220 + } ).then( function ( data ) { + var sii = data.query.stashimageinfo[ 0 ]; + + return $.Deferred().resolve( sii.thumburl, sii.mime ); + } ); + } + + return $.Deferred().reject( 'No filekey' ); + }; +}( jQuery, mediaWiki, OO ) ); diff --git a/resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.less b/resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.less new file mode 100644 index 0000000000..cf9496f91b --- /dev/null +++ b/resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.less @@ -0,0 +1,172 @@ +.mw-widgets-stashedFileWidget { + display: inline-block; + vertical-align: middle; + width: 100%; + max-width: 50em; + margin-right: 0.5em; + + &:last-child { + margin-right: 0; + } + + &.oo-ui-iconElement .mw-widgets-stashedFileWidget-info .mw-widgets-stashedFileWidget-label { + left: 2.875em; + } + + &.oo-ui-indicatorElement .mw-widgets-stashedFileWidget-info .mw-widgets-stashedFileWidget-label { + right: 4.4625em; + } +} + +.mw-widgets-stashedFileWidget-info { + height: 2.4em; + background-color: #ffffff; + border: 1px solid #cccccc; + border-radius: 2px; + width: 100%; + display: table-cell; + vertical-align: middle; + position: relative; + overflow: hidden; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + + > .mw-widgets-stashedFileWidget-label { + line-height: 2.3em; + margin: 0; + overflow: hidden; + white-space: nowrap; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + text-overflow: ellipsis; + left: 0.5em; + right: 2.375em; + position: absolute; + top: 0; + bottom: 0; + + > .mw-widgets-stashedFileWidget-fileName { + float: left; + } + > .mw-widgets-stashedFileWidget-fileType { + color: #888888; + float: right; + } + } + + > .oo-ui-indicatorElement-indicator, + > .oo-ui-iconElement-icon { + position: absolute; + } + + > .oo-ui-indicatorElement-indicator { + right: 0; + top: 0; + width: 0.9375em; + height: 2.3em; + margin-right: 0.775em; + } + + > .oo-ui-iconElement-icon { + top: 0; + width: 1.875em; + height: 2.3em; + margin-left: 0.5em; + left: 0; + } + + &.oo-ui-widget-disabled { + .mw-widgets-stashedFileWidget-info { + color: #cccccc; + text-shadow: 0 1px 1px #ffffff; + border-color: #dddddd; + background-color: #f3f3f3; + + > .oo-ui-iconElement-icon, + > .oo-ui-indicatorElement-indicator { + opacity: 0.2; + } + } + } +} + +.mw-widgets-stashedFileWidget-thumbnail-container { + cursor: default; + height: 5.5em; + text-align: left; + padding: 0; + background-color: #ffffff; + border: 1px solid #cccccc; + margin-bottom: 0.5em; + vertical-align: middle; + overflow: hidden; + border-radius: 2px; + + .mw-widgets-stashedFileWidget-thumbnail { + height: 5.5em; + width: 5.5em; + position: absolute; + background-size: cover; + background-position: center center; + + &.oo-ui-pendingElement-pending { + background-size: auto; + } + + > .mw-widgets-stashedFileWidget-noThumbnail-icon { + opacity: 0.4; + background-color: #cccccc; + height: 5.5em; + width: 5.5em; + } + } + + .mw-widgets-stashedFileWidget-info { + border: none; + background: none; + display: block; + height: 100%; + width: auto; + margin-left: 5.5em; + + > .mw-widgets-stashedFileWidget-label { + position: relative; + + > .mw-widgets-stashedFileWidget-fileName { + display: block; + float: none; + } + + > .mw-widgets-stashedFileWidget-fileType { + display: block; + float: none; + } + } + } +} + + +.mw-widgets-stashedFileWidget-empty { + .mw-widgets-stashedFileWidget-thumbnail-container { + text-align: center; + + .mw-widgets-stashedFileWidget-thumbnail, + .mw-widgets-stashedFileWidget-info { + margin: 0; + display: none; + } + } + + .mw-widgets-stashedFileWidget-label { + color: #cccccc; + right: 0.5em; + } + + &.oo-ui-indicatorElement { + .mw-widgets-stashedFileWidget-label { + right: 2em; + } + } +} diff --git a/resources/src/mediawiki/api/upload.js b/resources/src/mediawiki/api/upload.js index 981a2e93c4..a6a0d8c95b 100644 --- a/resources/src/mediawiki/api/upload.js +++ b/resources/src/mediawiki/api/upload.js @@ -347,21 +347,7 @@ } function finishUpload( moreData ) { - data = $.extend( data, moreData ); - data.filekey = filekey; - data.action = 'upload'; - data.format = 'json'; - - if ( !data.filename ) { - throw new Error( 'Filename not included in file data.' ); - } - - return api.postWithEditToken( data ).then( function ( result ) { - if ( result.upload && result.upload.warnings ) { - return $.Deferred().reject( getFirstKey( result.upload.warnings ), result ).promise(); - } - return result; - } ); + api.uploadFromStash( filekey, $.extend( data, moreData ) ); } return this.upload( file, { stash: true, filename: data.filename } ).then( @@ -380,6 +366,29 @@ ); }, + /** + * Finish an upload in the stash. + * + * @param {string} filekey + * @param {Object} data + */ + uploadFromStash: function ( filekey, data ) { + data.filekey = filekey; + data.action = 'upload'; + data.format = 'json'; + + if ( !data.filename ) { + throw new Error( 'Filename not included in file data.' ); + } + + return this.postWithEditToken( data ).then( function ( result ) { + if ( result.upload && result.upload.warnings ) { + return $.Deferred().reject( getFirstKey( result.upload.warnings ), result ).promise(); + } + return result; + } ); + }, + needToken: function () { return true; } diff --git a/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js b/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js index 6af0edf25e..2b28cb4cf0 100644 --- a/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js +++ b/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js @@ -61,6 +61,7 @@ * @constructor * @param {Object} config Configuration options * @cfg {jQuery} [$overlay] Overlay to use for widgets in the booklet + * @cfg {string} [filekey] Sets the stashed file to finish uploading. Overrides most of the file selection process, and fetches a thumbnail from the server. */ mw.Upload.BookletLayout = function ( config ) { // Parent constructor @@ -68,6 +69,8 @@ this.$overlay = config.$overlay; + this.filekey = config.filekey; + this.renderUploadForm(); this.renderInfoForm(); this.renderInsertForm(); @@ -164,8 +167,13 @@ this.clear(); this.upload = this.createUpload(); + this.setPage( 'upload' ); + if ( this.filekey ) { + this.setFilekey( this.filekey ); + } + return this.upload.getApi().then( function ( api ) { // If the user can't upload anything, don't give them the option to. @@ -217,10 +225,23 @@ layout = this, file = this.getFile(); - this.setFilename( file.name ); - this.setPage( 'info' ); + if ( this.filekey ) { + if ( file === null ) { + // Someone gonna get-a hurt real bad + throw new Error( 'filekey not passed into file select widget, which is impossible. Quitting while we\'re behind.' ); + } + + // Stashed file already uploaded. + deferred.resolve(); + this.uploadPromise = deferred; + this.emit( 'fileUploaded' ); + return deferred; + } + + this.setFilename( file.name ); + this.upload.setFile( file ); // The original file name might contain invalid characters, so use our sanitized one this.upload.setFilename( this.getFilename() ); @@ -416,14 +437,12 @@ var fieldset, layout = this; - this.selectFileWidget = new OO.ui.SelectFileWidget( { - showDropTarget: true - } ); + this.selectFileWidget = this.getFileWidget(); fieldset = new OO.ui.FieldsetLayout(); fieldset.addItems( [ this.selectFileWidget ] ); this.uploadForm = new OO.ui.FormLayout( { items: [ fieldset ] } ); - // Validation + // Validation (if the SFW is for a stashed file, this never fires) this.selectFileWidget.on( 'change', this.onUploadFormChange.bind( this ) ); this.selectFileWidget.on( 'change', function () { @@ -433,6 +452,23 @@ return this.uploadForm; }; + /** + * Gets the widget for displaying or inputting the file to upload. + * + * @return {OO.ui.SelectFileWidget|mw.widgets.StashedFileWidget} + */ + mw.Upload.BookletLayout.prototype.getFileWidget = function () { + if ( this.filekey ) { + return new mw.widgets.StashedFileWidget( { + filekey: this.filekey + } ); + } + + return new OO.ui.SelectFileWidget( { + showDropTarget: true + } ); + }; + /** * Updates the file preview on the info form when a file is added. * @@ -640,6 +676,20 @@ this.selectFileWidget.setValue( file ); }; + /** + * Sets the filekey of a file already stashed on the server + * as the target of this upload operation. + * + * @protected + * @param {string} filekey + */ + mw.Upload.BookletLayout.prototype.setFilekey = function ( filekey ) { + this.upload.setFilekey( this.filekey ); + this.selectFileWidget.setValue( filekey ); + + this.onUploadFormChange(); + }; + /** * Clear the values of all fields * diff --git a/resources/src/mediawiki/mediawiki.Upload.js b/resources/src/mediawiki/mediawiki.Upload.js index 4a463b0010..23b0900e06 100644 --- a/resources/src/mediawiki/mediawiki.Upload.js +++ b/resources/src/mediawiki/mediawiki.Upload.js @@ -91,6 +91,20 @@ this.filename = filename; }; + /** + * Set the stashed file to finish uploading. + * + * @param {string} filekey + */ + UP.setFilekey = function ( filekey ) { + var upload = this; + + this.setState( Upload.State.STASHED ); + this.stashPromise = $.Deferred().resolve( function ( data ) { + return upload.api.uploadFromStash( filekey, data ); + } ); + }; + /** * Sets the filename based on the filename as it was on the upload. */ diff --git a/tests/parser/parserTest.inc b/tests/parser/parserTest.inc index 56108c96e8..0987c0f77b 100644 --- a/tests/parser/parserTest.inc +++ b/tests/parser/parserTest.inc @@ -27,6 +27,7 @@ * @file * @ingroup Testing */ +use MediaWiki\MediaWikiServices; /** * @ingroup Testing @@ -244,6 +245,9 @@ class ParserTest { // "extra language links" // see https://gerrit.wikimedia.org/r/111390 array_push( $wgExtraInterlanguageLinkPrefixes, 'mul' ); + + // Reset all services to be consistent with the new settings! + MediaWikiServices::resetGlobalInstance(); } /** @@ -1005,11 +1009,6 @@ class ParserTest { $this->databaseSetupDone = true; - # SqlBagOStuff broke when using temporary tables on r40209 (bug 15892). - # It seems to have been fixed since (r55079?), but regressed at some point before r85701. - # This works around it for now... - ObjectCache::$instances[CACHE_DB] = new HashBagOStuff; - # CREATE TEMPORARY TABLE breaks if there is more than one server if ( wfGetLB()->getServerCount() != 1 ) { $this->useTemporaryTables = false; @@ -1036,11 +1035,22 @@ class ParserTest { $this->db->insert( 'site_stats', [ 'ss_row_id' => 1, 'ss_images' => 2, 'ss_good_articles' => 1 ] ); - # Reinitialise the LocalisationCache to match the database state - Language::getLocalisationCache()->unloadAll(); + $bootstrapConfig = MediaWikiServices::getInstance()->getBootstrapConfig(); + $configOverrides = new HashConfig(); - # Clear the message cache - MessageCache::singleton()->clear(); + # SqlBagOStuff broke when using temporary tables on r40209 (bug 15892). + # It seems to have been fixed since (r55079?), but regressed at some point before r85701. + # This works around it for now... + $objectCaches = [ + CACHE_DB => [ 'class' => 'HashBagOStuff' ], + ] + $bootstrapConfig->get( 'ObjectCaches' ); + + $configOverrides->set( 'ObjectCaches', $objectCaches ); + + // Reset all services to be consistent with the new settings! + MediaWikiServices::resetGlobalInstance( + new MultiConfig( [ $configOverrides, $bootstrapConfig ] ) + ); // Remember to update newParserTests.php after changing the below // (and it uses a slightly different syntax just for teh lulz) @@ -1241,11 +1251,7 @@ class ParserTest { * after each test runs. */ private function teardownGlobals() { - RepoGroup::destroySingleton(); - FileBackendGroup::destroySingleton(); - LockManagerGroup::destroySingletons(); - LinkCache::singleton()->clear(); - MWTidy::destroySingleton(); + MediaWikiServices::resetGlobalInstance(); foreach ( $this->savedGlobals as $var => $val ) { $GLOBALS[$var] = $val; diff --git a/tests/phpunit/MediaWikiTestCase.php b/tests/phpunit/MediaWikiTestCase.php index a99b4b926b..08785ea7b3 100644 --- a/tests/phpunit/MediaWikiTestCase.php +++ b/tests/phpunit/MediaWikiTestCase.php @@ -2,12 +2,23 @@ use MediaWiki\Logger\LegacySpi; use MediaWiki\Logger\LoggerFactory; use MediaWiki\Logger\MonologSpi; +use MediaWiki\MediaWikiServices; use Psr\Log\LoggerInterface; /** * @since 1.18 */ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { + + /** + * The service locator created by prepareServices(). This service locator will + * be restored after each test. Tests that pollute the global service locator + * instance should use overrideMwServices() to isolate the test. + * + * @var MediaWikiServices|null + */ + private static $serviceLocator = null; + /** * $called tracks whether the setUp and tearDown method has been called. * class extending MediaWikiTestCase usually override setUp and tearDown @@ -108,18 +119,204 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { } } - public function run( PHPUnit_Framework_TestResult $result = null ) { + public static function setUpBeforeClass() { + parent::setUpBeforeClass(); + + // NOTE: Usually, PHPUnitMaintClass::finalSetup already called this, + // but let's make doubly sure. + self::prepareServices( new GlobalVarConfig() ); + } + + /** + * Prepare service configuration for unit testing. + * + * This calls MediaWikiServices::resetGlobalInstance() to allow some critical services + * to be overridden for testing. + * + * prepareServices() only needs to be called once, but should be called as early as possible, + * before any class has a chance to grab a reference to any of the global services + * instances that get discarded by prepareServices(). Only the first call has any effect, + * later calls are ignored. + * + * @note This is called by PHPUnitMaintClass::finalSetup. + * + * @see MediaWikiServices::resetGlobalInstance() + * + * @param Config $bootstrapConfig The bootstrap config to use with the new + * MediaWikiServices. Only used for the first call to this method. + */ + public static function prepareServices( Config $bootstrapConfig ) { + static $servicesPrepared = false; + + if ( $servicesPrepared ) { + return; + } else { + $servicesPrepared = true; + } + + self::resetGlobalServices( $bootstrapConfig ); + } + + /** + * Reset global services, and install testing environment. + * This is the testing equivalent of MediaWikiServices::resetGlobalInstance(). + * This should only be used to set up the testing environment, not when + * runnnig unit tests. Use overrideMwServices() for that. + * + * @see MediaWikiServices::resetGlobalInstance() + * @see prepareServices() + * @see overrideMwServices() + * + * @param Config|null $bootstrapConfig The bootstrap config to use with the new + * MediaWikiServices. + */ + protected static function resetGlobalServices( Config $bootstrapConfig = null ) { + $oldServices = MediaWikiServices::getInstance(); + $oldConfigFactory = $oldServices->getConfigFactory(); + + $testConfig = self::makeTestConfig( $bootstrapConfig ); + + MediaWikiServices::resetGlobalInstance( $testConfig ); + + self::$serviceLocator = MediaWikiServices::getInstance(); + self::installTestServices( + $oldConfigFactory, + self::$serviceLocator + ); + } + + /** + * Create a config suitable for testing, based on a base config, default overrides, + * and custom overrdies. + * + * @param Config|null $baseConfig + * @param Config|null $customOverrides + * + * @return Config + */ + private static function makeTestConfig( + Config $baseConfig = null, + Config $customOverrides = null + ) { + $defaultOverrides = new HashConfig(); + + if ( !$baseConfig ) { + $baseConfig = MediaWikiServices::getInstance()->getBootstrapConfig(); + } + /* Some functions require some kind of caching, and will end up using the db, * which we can't allow, as that would open a new connection for mysql. * Replace with a HashBag. They would not be going to persist anyway. */ - ObjectCache::$instances[CACHE_DB] = new HashBagOStuff; + $hashCache = [ 'class' => 'HashBagOStuff' ]; + $objectCaches = [ + CACHE_DB => $hashCache, + CACHE_ACCEL => $hashCache, + CACHE_MEMCACHED => $hashCache, + 'apc' => $hashCache, + 'xcache' => $hashCache, + 'wincache' => $hashCache, + ] + $baseConfig->get( 'ObjectCaches' ); + + $defaultOverrides->set( 'ObjectCaches', $objectCaches ); + $defaultOverrides->set( 'MainCacheType', CACHE_NONE ); + + $testConfig = $customOverrides + ? new MultiConfig( [ $customOverrides, $defaultOverrides, $baseConfig ] ) + : new MultiConfig( [ $defaultOverrides, $baseConfig ] ); + + return $testConfig; + } - // Sandbox APC by replacing with in-process hash instead. - // Ensures values are removed between tests. - ObjectCache::$instances['apc'] = - ObjectCache::$instances['xcache'] = - ObjectCache::$instances['wincache'] = new HashBagOStuff; + /** + * @param ConfigFactory $oldConfigFactory + * @param MediaWikiServices $newServices + * + * @throws MWException + */ + private static function installTestServices( + ConfigFactory $oldConfigFactory, + MediaWikiServices $newServices + ) { + // Use bootstrap config for all configuration. + // This allows config overrides via global variables to take effect. + $bootstrapConfig = $newServices->getBootstrapConfig(); + $newServices->resetServiceForTesting( 'ConfigFactory' ); + $newServices->redefineService( + 'ConfigFactory', + self::makeTestConfigFactoryInstantiator( + $oldConfigFactory, + [ 'main' => $bootstrapConfig ] + ) + ); + } + + /** + * @param ConfigFactory $oldFactory + * @param Config[] $config + * + * @return Closure + */ + private static function makeTestConfigFactoryInstantiator( + ConfigFactory $oldFactory, + array $configurations + ) { + return function( MediaWikiServices $services ) use ( $oldFactory, $configurations ) { + $factory = new ConfigFactory(); + + // clone configurations from $oldFactory that are not overwritten by $configurations + $namesToClone = array_diff( + $oldFactory->getConfigNames(), + array_keys( $configurations ) + ); + + foreach ( $namesToClone as $name ) { + $factory->register( $name, $oldFactory->makeConfig( $name ) ); + } + + foreach ( $configurations as $name => $config ) { + $factory->register( $name, $config ); + } + + return $factory; + }; + } + + /** + * Resets some well known services that typically have state that may interfere with unit tests. + * This is a lightweight alternative to resetGlobalServices(). + * + * @note There is no guarantee that no references remain to stale service instances destroyed + * by a call to doLightweightServiceReset(). + * + * @throws MWException if called outside of PHPUnit tests. + * + * @see resetGlobalServices() + */ + private function doLightweightServiceReset() { + global $wgRequest; + + $services = MediaWikiServices::getInstance(); + + JobQueueGroup::destroySingletons(); + ObjectCache::clear(); + FileBackendGroup::destroySingleton(); + + // TODO: move global state into MediaWikiServices + RequestContext::resetMain(); + MediaHandler::resetCache(); + if ( session_id() !== '' ) { + session_write_close(); + session_id( '' ); + } + + $wgRequest = new FauxRequest(); + MediaWiki\Session\SessionManager::resetCache(); + } + + public function run( PHPUnit_Framework_TestResult $result = null ) { + // Reset all caches between tests. + $this->doLightweightServiceReset(); $needsResetDB = false; @@ -289,6 +486,12 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { } $this->mwGlobals = []; $this->restoreLoggers(); + + if ( self::$serviceLocator && MediaWikiServices::getInstance() !== self::$serviceLocator ) { + MediaWikiServices::forceGlobalInstance( self::$serviceLocator ); + } + + // TODO: move global state into MediaWikiServices RequestContext::resetMain(); MediaHandler::resetCache(); if ( session_id() !== '' ) { @@ -324,6 +527,28 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { ); } + /** + * Sets a service, maintaining a stashed version of the previous service to be + * restored in tearDown + * + * @param string $name + * @param object $object + */ + protected function setService( $name, $object ) { + // If we did not yet override the service locator, so so now. + if ( MediaWikiServices::getInstance() === self::$serviceLocator ) { + $this->overrideMwServices(); + } + + MediaWikiServices::getInstance()->disableService( $name ); + MediaWikiServices::getInstance()->redefineService( + $name, + function () use ( $object ) { + return $object; + } + ); + } + /** * Sets a global, maintaining a stashed version of the previous global to be * restored in tearDown @@ -354,6 +579,9 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { * @param mixed $value Value to set the global to (ignored * if an array is given as first argument). * + * @note To allow changes to global variables to take effect on global service instances, + * call overrideMwServices(). + * * @since 1.21 */ protected function setMwGlobals( $pairs, $value = null ) { @@ -381,6 +609,10 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { * @param array|string $globalKeys Key to the global variable, or an array of keys. * * @throws Exception When trying to stash an unset global + * + * @note To allow changes to global variables to take effect on global service instances, + * call overrideMwServices(). + * * @since 1.23 */ protected function stashMwGlobals( $globalKeys ) { @@ -421,6 +653,9 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { * * @throws MWException If the designated global is not an array. * + * @note To allow changes to global variables to take effect on global service instances, + * call overrideMwServices(). + * * @since 1.21 */ protected function mergeMwGlobalArrayValue( $name, $values ) { @@ -441,6 +676,52 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { $this->setMwGlobals( $name, $merged ); } + /** + * Stashes the global instance of MediaWikiServices, and installs a new one, + * allowing test cases to override settings and services. + * The previous instance of MediaWikiServices will be restored on tearDown. + * + * @since 1.27 + * + * @param Config $configOverrides Configuration overrides for the new MediaWikiServices instance. + * @param callable[] $services An associative array of services to re-define. Keys are service + * names, values are callables. + * + * @return MediaWikiServices + * @throws MWException + */ + protected function overrideMwServices( Config $configOverrides = null, array $services = [] ) { + if ( !$configOverrides ) { + $configOverrides = new HashConfig(); + } + + $oldInstance = MediaWikiServices::getInstance(); + $oldConfigFactory = $oldInstance->getConfigFactory(); + + $testConfig = self::makeTestConfig( null, $configOverrides ); + $newInstance = new MediaWikiServices( $testConfig ); + + // Load the default wiring from the specified files. + // NOTE: this logic mirrors the logic in MediaWikiServices::newInstance. + $wiringFiles = $testConfig->get( 'ServiceWiringFiles' ); + $newInstance->loadWiringFiles( $wiringFiles ); + + // Provide a traditional hook point to allow extensions to configure services. + Hooks::run( 'MediaWikiServices', [ $newInstance ] ); + + foreach ( $services as $name => $callback ) { + $newInstance->redefineService( $name, $callback ); + } + + self::installTestServices( + $oldConfigFactory, + $newInstance + ); + MediaWikiServices::forceGlobalInstance( $newInstance ); + + return $newInstance; + } + /** * @since 1.27 * @param string|Language $lang @@ -475,6 +756,9 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { * @param LoggerInterface $logger */ protected function setLogger( $channel, LoggerInterface $logger ) { + // TODO: Once loggers are managed by MediaWikiServices, use + // overrideMwServices() to set loggers. + $provider = LoggerFactory::getProvider(); $wrappedProvider = TestingAccessWrapper::newFromObject( $provider ); $singletons = $wrappedProvider->singletons; @@ -566,6 +850,10 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { $user = User::newFromName( 'UTSysop' ); $comment = __METHOD__ . ': Sample page for unit test.'; + // Avoid memory leak...? + // LinkCache::singleton()->clear(); + // Maybe. But doing this absolutely breaks $title->isRedirect() when called during unit tests.... + $page = WikiPage::factory( $title ); $page->doEditContent( ContentHandler::makeContent( $text, $title ), $comment, 0, false, $user ); @@ -765,6 +1053,9 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { return; } + // TODO: the below should be re-written as soon as LBFactory, LoadBalancer, + // and DatabaseBase no longer use global state. + self::$dbSetup = true; if ( !self::setupDatabaseWithTestPrefix( $db, $prefix ) ) { diff --git a/tests/phpunit/includes/MediaWikiServicesTest.php b/tests/phpunit/includes/MediaWikiServicesTest.php index 127f869663..96abf97e41 100644 --- a/tests/phpunit/includes/MediaWikiServicesTest.php +++ b/tests/phpunit/includes/MediaWikiServicesTest.php @@ -1,5 +1,6 @@ set( 'ServiceWiringFiles', $globalConfig->get( 'ServiceWiringFiles' ) ); + $testConfig->set( 'ConfigRegistry', $globalConfig->get( 'ConfigRegistry' ) ); + + return $testConfig; + } + + /** + * @return MediaWikiServices + */ + private function newMediaWikiServices( Config $config = null ) { + if ( $config === null ) { + $config = $this->newTestConfig(); + } + + $instance = new MediaWikiServices( $config ); + + // Load the default wiring from the specified files. + $wiringFiles = $config->get( 'ServiceWiringFiles' ); + $instance->loadWiringFiles( $wiringFiles ); + + return $instance; + } + public function testGetInstance() { $services = MediaWikiServices::getInstance(); $this->assertInstanceOf( 'MediaWiki\\MediaWikiServices', $services ); } + public function testForceGlobalInstance() { + $newServices = $this->newMediaWikiServices(); + $oldServices = MediaWikiServices::forceGlobalInstance( $newServices ); + + $this->assertInstanceOf( 'MediaWiki\\MediaWikiServices', $oldServices ); + $this->assertNotSame( $oldServices, $newServices ); + + $theServices = MediaWikiServices::getInstance(); + $this->assertSame( $theServices, $newServices ); + + MediaWikiServices::forceGlobalInstance( $oldServices ); + + $theServices = MediaWikiServices::getInstance(); + $this->assertSame( $theServices, $oldServices ); + } + + public function testResetGlobalInstance() { + $newServices = $this->newMediaWikiServices(); + $oldServices = MediaWikiServices::forceGlobalInstance( $newServices ); + + MediaWikiServices::resetGlobalInstance( $this->newTestConfig() ); + $theServices = MediaWikiServices::getInstance(); + + $this->assertNotSame( $theServices, $newServices ); + $this->assertNotSame( $theServices, $oldServices ); + + MediaWikiServices::forceGlobalInstance( $oldServices ); + } + + public function testDisableStorageBackend() { + $newServices = $this->newMediaWikiServices(); + $oldServices = MediaWikiServices::forceGlobalInstance( $newServices ); + + $lbFactory = $this->getMockBuilder( 'LBFactorySimple' ) + ->disableOriginalConstructor() + ->getMock(); + + $lbFactory->expects( $this->once() ) + ->method( 'destroy' ); + + $newServices->redefineService( + 'DBLoadBalancerFactory', + function() use ( $lbFactory ) { + return $lbFactory; + } + ); + + // force the service to become active, so we can check that it does get destroyed + $newServices->getService( 'DBLoadBalancerFactory' ); + + MediaWikiServices::disableStorageBackend(); // should destroy DBLoadBalancerFactory + + try { + MediaWikiServices::getInstance()->getService( 'DBLoadBalancerFactory' ); + $this->fail( 'DBLoadBalancerFactory shoudl have been disabled' ); + } + catch ( ServiceDisabledException $ex ) { + // ok, as expected + } + catch ( Throwable $ex ) { + $this->fail( 'ServiceDisabledException expected, caught ' . get_class( $ex ) ); + } + + MediaWikiServices::forceGlobalInstance( $oldServices ); + } + + public function testResetChildProcessServices() { + $newServices = $this->newMediaWikiServices(); + $oldServices = MediaWikiServices::forceGlobalInstance( $newServices ); + + $lbFactory = $this->getMockBuilder( 'LBFactorySimple' ) + ->disableOriginalConstructor() + ->getMock(); + + $lbFactory->expects( $this->once() ) + ->method( 'destroy' ); + + $newServices->redefineService( + 'DBLoadBalancerFactory', + function() use ( $lbFactory ) { + return $lbFactory; + } + ); + + // force the service to become active, so we can check that it does get destroyed + $oldLBFactory = $newServices->getService( 'DBLoadBalancerFactory' ); + + MediaWikiServices::resetChildProcessServices(); + $finalServices = MediaWikiServices::getInstance(); + + $newLBFactory = $finalServices->getService( 'DBLoadBalancerFactory' ); + + $this->assertNotSame( $oldLBFactory, $newLBFactory ); + + MediaWikiServices::forceGlobalInstance( $oldServices ); + } + + public function testResetServiceForTesting() { + $services = $this->newMediaWikiServices(); + $serviceCounter = 0; + + $services->defineService( + 'Test', + function() use ( &$serviceCounter ) { + $serviceCounter++; + $service = $this->getMock( 'MediaWiki\Services\DestructibleService' ); + $service->expects( $this->once() )->method( 'destroy' ); + return $service; + } + ); + + // This should do nothing. In particular, it should not create a service instance. + $services->resetServiceForTesting( 'Test' ); + $this->assertEquals( 0, $serviceCounter, 'No service instance should be created yet.' ); + + $oldInstance = $services->getService( 'Test' ); + $this->assertEquals( 1, $serviceCounter, 'A service instance should exit now.' ); + + // The old instance should be detached, and destroy() called. + $services->resetServiceForTesting( 'Test' ); + $newInstance = $services->getService( 'Test' ); + + $this->assertNotSame( $oldInstance, $newInstance ); + + // Satisfy the expectation that destroy() is called also for the second service instance. + $newInstance->destroy(); + } + + public function testResetServiceForTesting_noDestroy() { + $services = $this->newMediaWikiServices(); + + $services->defineService( + 'Test', + function() { + $service = $this->getMock( 'MediaWiki\Services\DestructibleService' ); + $service->expects( $this->never() )->method( 'destroy' ); + return $service; + } + ); + + $oldInstance = $services->getService( 'Test' ); + + // The old instance should be detached, but destroy() not called. + $services->resetServiceForTesting( 'Test', false ); + $newInstance = $services->getService( 'Test' ); + + $this->assertNotSame( $oldInstance, $newInstance ); + } + public function provideGetters() { - // NOTE: This should list all service getters defined in MediaWikiServices. - // NOTE: For every test case defined here there should be a corresponding - // test case defined in provideGetService(). - return [ - 'BootstrapConfig' => [ 'getBootstrapConfig', Config::class ], - 'ConfigFactory' => [ 'getConfigFactory', ConfigFactory::class ], - 'MainConfig' => [ 'getMainConfig', Config::class ], - 'SiteStore' => [ 'getSiteStore', SiteStore::class ], - 'SiteLookup' => [ 'getSiteLookup', SiteLookup::class ], - ]; + $getServiceCases = $this->provideGetService(); + $getterCases = []; + + // All getters should be named just like the service, with "get" added. + foreach ( $getServiceCases as $name => $case ) { + $getterCases[$name] = [ + 'get' . $case[0], + $case[1] + ]; + } + + return $getterCases; } /** @@ -46,6 +228,9 @@ class MediaWikiServicesTest extends PHPUnit_Framework_TestCase { 'MainConfig' => [ 'MainConfig', Config::class ], 'SiteStore' => [ 'SiteStore', SiteStore::class ], 'SiteLookup' => [ 'SiteLookup', SiteLookup::class ], + 'DBLoadBalancerFactory' => [ 'DBLoadBalancerFactory', 'LBFactory' ], + 'DBLoadBalancer' => [ 'DBLoadBalancer', 'LoadBalancer' ], + 'WatchedItemStore' => [ 'WatchedItemStore', WatchedItemStore::class ], ]; } diff --git a/tests/phpunit/includes/MessageTest.php b/tests/phpunit/includes/MessageTest.php index cf34b18713..97852cf9c3 100644 --- a/tests/phpunit/includes/MessageTest.php +++ b/tests/phpunit/includes/MessageTest.php @@ -15,12 +15,12 @@ class MessageTest extends MediaWikiLangTestCase { * @covers Message::__construct * @dataProvider provideConstructor */ - public function testConstructor( $expectedLang, $key, $params, $language ) { + public function testConstructor( Language $expectedLang, $key, $params, $language ) { $message = new Message( $key, $params, $language ); $this->assertEquals( $key, $message->getKey() ); $this->assertEquals( $params, $message->getParams() ); - $this->assertEquals( $expectedLang, $message->getLanguage() ); + $this->assertEquals( $expectedLang->getCode(), $message->getLanguage()->getCode() ); $messageSpecifier = $this->getMockForAbstractClass( 'MessageSpecifier' ); $messageSpecifier->expects( $this->any() ) @@ -31,7 +31,7 @@ class MessageTest extends MediaWikiLangTestCase { $this->assertEquals( $key, $message->getKey() ); $this->assertEquals( $params, $message->getParams() ); - $this->assertEquals( $expectedLang, $message->getLanguage() ); + $this->assertEquals( $expectedLang->getCode(), $message->getLanguage()->getCode() ); } public static function provideConstructor() { diff --git a/tests/phpunit/includes/Services/ServiceContainerTest.php b/tests/phpunit/includes/Services/ServiceContainerTest.php index 942c45e0c8..933777c33c 100644 --- a/tests/phpunit/includes/Services/ServiceContainerTest.php +++ b/tests/phpunit/includes/Services/ServiceContainerTest.php @@ -69,11 +69,53 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $name = 'TestService92834576'; - $this->setExpectedException( 'InvalidArgumentException' ); + $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' ); $services->getService( $name ); } + public function testPeekService() { + $services = $this->newServiceContainer(); + + $services->defineService( + 'Foo', + function() { + return new stdClass(); + } + ); + + $services->defineService( + 'Bar', + function() { + return new stdClass(); + } + ); + + // trigger instantiation of Foo + $services->getService( 'Foo' ); + + $this->assertInternalType( + 'object', + $services->peekService( 'Foo' ), + 'Peek should return the service object if it had been accessed before.' + ); + + $this->assertNull( + $services->peekService( 'Bar' ), + 'Peek should return null if the service was never accessed.' + ); + } + + public function testPeekService_fail_unknown() { + $services = $this->newServiceContainer(); + + $name = 'TestService92834576'; + + $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' ); + + $services->peekService( $name ); + } + public function testDefineService() { $services = $this->newServiceContainer(); @@ -99,7 +141,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { return $theService; } ); - $this->setExpectedException( 'RuntimeException' ); + $this->setExpectedException( 'MediaWiki\Services\ServiceAlreadyDefinedException' ); $services->defineService( $name, function() use ( $theService ) { return $theService; @@ -147,7 +189,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { ]; // loading the same file twice should fail, because - $this->setExpectedException( 'RuntimeException' ); + $this->setExpectedException( 'MediaWiki\Services\ServiceAlreadyDefinedException' ); $services->loadWiringFiles( $wiringFiles ); } @@ -184,7 +226,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $theService = new stdClass(); $name = 'TestService92834576'; - $this->setExpectedException( 'RuntimeException' ); + $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' ); $services->redefineService( $name, function() use ( $theService ) { return $theService; @@ -204,11 +246,101 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { // create the service, so it can no longer be redefined $services->getService( $name ); - $this->setExpectedException( 'RuntimeException' ); + $this->setExpectedException( 'MediaWiki\Services\CannotReplaceActiveServiceException' ); + + $services->redefineService( $name, function() use ( $theService ) { + return $theService; + } ); + } + + public function testDisableService() { + $services = $this->newServiceContainer( [ 'Foo' ] ); + + $destructible = $this->getMock( 'MediaWiki\Services\DestructibleService' ); + $destructible->expects( $this->once() ) + ->method( 'destroy' ); + + $services->defineService( 'Foo', function() use ( $destructible ) { + return $destructible; + } ); + $services->defineService( 'Bar', function() { + return new stdClass(); + } ); + $services->defineService( 'Qux', function() { + return new stdClass(); + } ); + + // instantiate Foo and Bar services + $services->getService( 'Foo' ); + $services->getService( 'Bar' ); + + // disable service, should call destroy() once. + $services->disableService( 'Foo' ); + + // disabled service should still be listed + $this->assertContains( 'Foo', $services->getServiceNames() ); + + // getting other services should still work + $services->getService( 'Bar' ); + + // disable non-destructible service, and not-yet-instantiated service + $services->disableService( 'Bar' ); + $services->disableService( 'Qux' ); + + $this->assertNull( $services->peekService( 'Bar' ) ); + $this->assertNull( $services->peekService( 'Qux' ) ); + + // disabled service should still be listed + $this->assertContains( 'Bar', $services->getServiceNames() ); + $this->assertContains( 'Qux', $services->getServiceNames() ); + + // re-enable Bar service + $services->redefineService( 'Bar', function() { + return new stdClass(); + } ); + + $services->getService( 'Bar' ); + + $this->setExpectedException( 'MediaWiki\Services\ServiceDisabledException' ); + $services->getService( 'Qux' ); + } + + public function testDisableService_fail_undefined() { + $services = $this->newServiceContainer(); + + $theService = new stdClass(); + $name = 'TestService92834576'; + + $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' ); $services->redefineService( $name, function() use ( $theService ) { return $theService; } ); } + public function testDestroy() { + $services = $this->newServiceContainer(); + + $destructible = $this->getMock( 'MediaWiki\Services\DestructibleService' ); + $destructible->expects( $this->once() ) + ->method( 'destroy' ); + + $services->defineService( 'Foo', function() use ( $destructible ) { + return $destructible; + } ); + + $services->defineService( 'Bar', function() { + return new stdClass(); + } ); + + // create the service + $services->getService( 'Foo' ); + + // destroy the container + $services->destroy(); + + $this->setExpectedException( 'MediaWiki\Services\ContainerDisabledException' ); + $services->getService( 'Bar' ); + } + } diff --git a/tests/phpunit/includes/WatchedItemStoreUnitTest.php b/tests/phpunit/includes/WatchedItemStoreUnitTest.php index 9dd38df069..78231c2418 100644 --- a/tests/phpunit/includes/WatchedItemStoreUnitTest.php +++ b/tests/phpunit/includes/WatchedItemStoreUnitTest.php @@ -1,12 +1,11 @@ assertSame( $instanceOne, $instanceTwo ); } - public function testOverrideDefaultInstance() { - $instance = WatchedItemStore::getDefaultInstance(); - $scopedOverride = $instance->overrideDefaultInstance( null ); - - $this->assertNotSame( $instance, WatchedItemStore::getDefaultInstance() ); - - unset( $scopedOverride ); - - $this->assertSame( $instance, WatchedItemStore::getDefaultInstance() ); - } - public function testCountWatchedItems() { $user = $this->getMockNonAnonUserWithId( 1 ); diff --git a/tests/phpunit/includes/WatchedItemUnitTest.php b/tests/phpunit/includes/WatchedItemUnitTest.php index b4eaa765e9..db7f16c655 100644 --- a/tests/phpunit/includes/WatchedItemUnitTest.php +++ b/tests/phpunit/includes/WatchedItemUnitTest.php @@ -5,13 +5,30 @@ * * @covers WatchedItem */ -class WatchedItemUnitTest extends PHPUnit_Framework_TestCase { +class WatchedItemUnitTest extends MediaWikiTestCase { + + /** + * @param int $id + * + * @return PHPUnit_Framework_MockObject_MockObject|User + */ + private function getMockUser( $id ) { + $user = $this->getMock( User::class ); + $user->expects( $this->any() ) + ->method( 'getId' ) + ->will( $this->returnValue( $id ) ); + $user->expects( $this->any() ) + ->method( 'isAllowed' ) + ->will( $this->returnValue( true ) ); + return $user; + } public function provideUserTitleTimestamp() { + $user = $this->getMockUser( 111 ); return [ - [ User::newFromId( 111 ), Title::newFromText( 'SomeTitle' ), null ], - [ User::newFromId( 111 ), Title::newFromText( 'SomeTitle' ), '20150101010101' ], - [ User::newFromId( 111 ), new TitleValue( 0, 'TVTitle', 'frag' ), '20150101010101' ], + [ $user, Title::newFromText( 'SomeTitle' ), null ], + [ $user, Title::newFromText( 'SomeTitle' ), '20150101010101' ], + [ $user, new TitleValue( 0, 'TVTitle', 'frag' ), '20150101010101' ], ]; } @@ -51,15 +68,13 @@ class WatchedItemUnitTest extends PHPUnit_Framework_TestCase { ->method( 'loadWatchedItem' ) ->with( $user, $linkTarget ) ->will( $this->returnValue( new WatchedItem( $user, $linkTarget, $timestamp ) ) ); - $scopedOverride = WatchedItemStore::overrideDefaultInstance( $store ); + $this->setService( 'WatchedItemStore', $store ); $item = WatchedItem::fromUserTitle( $user, $linkTarget, User::IGNORE_USER_RIGHTS ); $this->assertEquals( $user, $item->getUser() ); $this->assertEquals( $linkTarget, $item->getLinkTarget() ); $this->assertEquals( $timestamp, $item->getNotificationTimestamp() ); - - ScopedCallback::consume( $scopedOverride ); } /** @@ -85,12 +100,10 @@ class WatchedItemUnitTest extends PHPUnit_Framework_TestCase { return true; } ) ); - $scopedOverride = WatchedItemStore::overrideDefaultInstance( $store ); + $this->setService( 'WatchedItemStore', $store ); $item = new WatchedItem( $user, $linkTarget, $timestamp ); $item->resetNotificationTimestamp( $force, $oldid ); - - ScopedCallback::consume( $scopedOverride ); } public function testAddWatch() { @@ -157,17 +170,15 @@ class WatchedItemUnitTest extends PHPUnit_Framework_TestCase { $store->expects( $this->once() ) ->method( 'duplicateAllAssociatedEntries' ) ->with( $oldTitle, $newTitle ); - $scopedOverride = WatchedItemStore::overrideDefaultInstance( $store ); + $this->setService( 'WatchedItemStore', $store ); WatchedItem::duplicateEntries( $oldTitle, $newTitle ); - - ScopedCallback::consume( $scopedOverride ); } public function testBatchAddWatch() { - $itemOne = new WatchedItem( User::newFromId( 1 ), new TitleValue( 0, 'Title1' ), null ); + $itemOne = new WatchedItem( $this->getMockUser( 1 ), new TitleValue( 0, 'Title1' ), null ); $itemTwo = new WatchedItem( - User::newFromId( 3 ), + $this->getMockUser( 3 ), Title::newFromText( 'Title2' ), '20150101010101' ); @@ -193,11 +204,9 @@ class WatchedItemUnitTest extends PHPUnit_Framework_TestCase { $itemTwo->getTitle()->getTalkPage(), ] ); - $scopedOverride = WatchedItemStore::overrideDefaultInstance( $store ); + $this->setService( 'WatchedItemStore', $store ); WatchedItem::batchAddWatch( [ $itemOne, $itemTwo ] ); - - ScopedCallback::consume( $scopedOverride ); } } diff --git a/tests/phpunit/includes/config/ConfigFactoryTest.php b/tests/phpunit/includes/config/ConfigFactoryTest.php index 2288507e49..2c1d1e6f0e 100644 --- a/tests/phpunit/includes/config/ConfigFactoryTest.php +++ b/tests/phpunit/includes/config/ConfigFactoryTest.php @@ -8,17 +8,71 @@ class ConfigFactoryTest extends MediaWikiTestCase { public function testRegister() { $factory = new ConfigFactory(); $factory->register( 'unittest', 'GlobalVarConfig::newInstance' ); - $this->assertTrue( true ); // No exception thrown + $this->assertInstanceOf( GlobalVarConfig::class, $factory->makeConfig( 'unittest' ) ); + } + + /** + * @covers ConfigFactory::register + */ + public function testRegisterInvalid() { + $factory = new ConfigFactory(); $this->setExpectedException( 'InvalidArgumentException' ); $factory->register( 'invalid', 'Invalid callback' ); } + /** + * @covers ConfigFactory::register + */ + public function testRegisterInstance() { + $config = GlobalVarConfig::newInstance(); + $factory = new ConfigFactory(); + $factory->register( 'unittest', $config ); + $this->assertSame( $config, $factory->makeConfig( 'unittest' ) ); + } + + /** + * @covers ConfigFactory::register + */ + public function testRegisterAgain() { + $factory = new ConfigFactory(); + $factory->register( 'unittest', 'GlobalVarConfig::newInstance' ); + $config1 = $factory->makeConfig( 'unittest' ); + + $factory->register( 'unittest', 'GlobalVarConfig::newInstance' ); + $config2 = $factory->makeConfig( 'unittest' ); + + $this->assertNotSame( $config1, $config2 ); + } + + /** + * @covers ConfigFactory::register + */ + public function testGetConfigNames() { + $factory = new ConfigFactory(); + $factory->register( 'foo', 'GlobalVarConfig::newInstance' ); + $factory->register( 'bar', new HashConfig() ); + + $this->assertEquals( [ 'foo', 'bar' ], $factory->getConfigNames() ); + } + /** * @covers ConfigFactory::makeConfig */ public function testMakeConfig() { $factory = new ConfigFactory(); $factory->register( 'unittest', 'GlobalVarConfig::newInstance' ); + + $conf = $factory->makeConfig( 'unittest' ); + $this->assertInstanceOf( 'Config', $conf ); + $this->assertSame( $conf, $factory->makeConfig( 'unittest' ) ); + } + + /** + * @covers ConfigFactory::makeConfig + */ + public function testMakeConfigFallback() { + $factory = new ConfigFactory(); + $factory->register( '*', 'GlobalVarConfig::newInstance' ); $conf = $factory->makeConfig( 'unittest' ); $this->assertInstanceOf( 'Config', $conf ); } @@ -48,10 +102,10 @@ class ConfigFactoryTest extends MediaWikiTestCase { * @covers ConfigFactory::getDefaultInstance */ public function testGetDefaultInstance() { + // NOTE: the global config factory returned here has been overwritten + // for operation in test mode. It may not reflect LocalSettings. $factory = ConfigFactory::getDefaultInstance(); $this->assertInstanceOf( 'Config', $factory->makeConfig( 'main' ) ); - - $this->setExpectedException( 'ConfigException' ); - $factory->makeConfig( 'xyzzy' ); } + } diff --git a/tests/phpunit/phpunit.php b/tests/phpunit/phpunit.php index 77690cdd29..d876c4578a 100755 --- a/tests/phpunit/phpunit.php +++ b/tests/phpunit/phpunit.php @@ -139,6 +139,10 @@ class PHPUnitMaintClass extends Maintenance { // may break testing against floating point values // treated with PHP's serialize() ini_set( 'serialize_precision', 17 ); + + // TODO: we should call MediaWikiTestCase::prepareServices( new GlobalVarConfig() ) here. + // But PHPUnit may not be loaded yet, so we have to wait until just + // before PHPUnit_TextUI_Command::main() is executed at the end of this file. } public function execute() { @@ -237,4 +241,9 @@ echo defined( 'HHVM_VERSION' ) ? 'Using HHVM ' . HHVM_VERSION . ' (' . PHP_VERSION . ")\n" : 'Using PHP ' . PHP_VERSION . "\n"; +// Prepare global services for unit tests. +// FIXME: this should be done in the finalSetup() method, +// but PHPUnit may not have been loaded at that point. +MediaWikiTestCase::prepareServices( new GlobalVarConfig() ); + $wgPhpUnitClass::main();